对标题表示歉意,但我正在尝试做超出我水平的事情,甚至让我来解释它。
假设我有一个包含变量 person、foodstuff 和 amount 的表:
Person food Amount
Mike Butter 3
Mike Milk 4
Mike Chicken 2
Tim Milk 4
John Chicken 2
通过在查询中将表与其自身连接起来,我成功地创建了一个列表,其中食物是新变量的基础,值是数量。上表将变为:
Person Butter Milk Chicken
Mike 3 4 2
代码大约是:
Select
a.person,
b.amount as Butter,
c.amount as Milk,
d.amount as Chicken
from PersonFoodAmount a
inner join PersonFoodAmount b on a.person = b.person
inner join PersonFoodAmount c on a.person=c.person
where b.food='Butter'
and c.food='Milk'
and d.food='Chicken'
现在,这给了我迈克,因为他勾选了所有复选框。但我还需要部分匹配:
Person Butter Milk Chicken
Mike 3 4 2
Tim NULL 4 NULL
John NULL Null 2
我尝试过各种连接,包括完全外部连接,但我仍然只找到冰箱装满的人。
有什么建议吗?
最佳答案
您可以使用 Pivot 来实现此目的。
DECLARE @PersonStuff TABLE (Person varchar(10), Food varchar(10), Amount INT)
INSERT INTO @PersonStuff VALUES
('Mike','Butter', 3),
('Mike','Milk', 4),
('Mike','Chicken', 2),
('Tim','Milk', 4),
('John','Chicken', 2)
SELECT
*
FROM (
SELECT
*
FROM @PersonStuff ) AS SourceTable
PIVOT (
AVG(Amount)
FOR Food IN ( [Butter],[Milk],[Chicken] )
) AS PivotTable
结果:
Person Butter Milk Chicken
John NULL NULL 2
Mike 3 4 2
Tim NULL 4 NULL
关于SQL Server - 尝试对我的表进行非规范化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45920094/