子查询返回多个结果

时间:2017-07-11 21:59:30

标签: sql subquery

我有3个表,如果我执行

,我会将数据收集到一个临时表中

从#TempTable中选择* 我得到了

DOG     AGE GENDER  T_id    I_name                      T_name
Fiddo   4   M       1       comfy bed                   bed
Daisy   7   F       1       red mat                     bed
Fluffy  1   M       1       old rug                     bed
Fiddo   4   M       2       bowl with paw               bowl
Daisy   7   F       2       chinese food tray           bowl
Fiddo   4   M       4       fancy leather collar        collar
Daisy   7   F       4       nametags on a string        collar
Fluffy  1   M       4       custom-stamped mardingale   collar
Daisy   7   F       3       blue ball                   toy
Fluffy  1   M       3       chewy bone                  toy

对于我正在寻找的结果集我有这个查询我对这个表执行

Select Distinct DOG,
                AGE,
                GENDER,
                BED = COALESCE((Select I_name from #TempTable where DOG = DOG and T_name = 'bed'), NULL),
                BOWL = COALESCE((Select I_name from #TempTable where DOG = DOG and T_name = 'bowl'), NULL),
                TOY = COALESCE((Select I_name from #TempTable where DOG = DOG and T_name = 'toy'), NULL),
                COLLAR = COALESCE((Select I_name from #TempTable where DOG = DOG and T_name = 'collar'), NULL)
From #TempTable
我收到错误

子查询返回的值超过1。当子查询遵循=,!=,<,< =,>,> =或子查询用作表达式时,不允许这样做。

因为只要我能辨别DOG没有解决一个值的任何语法提示我没有正确使用DOG的行值?我想在Daisy,Fiddo和Fluffy的结果集中有3行,如果他们有一个或NULL,他们的年龄,性别,床,碗,他们的项圈和他们的玩具,如果他们有一个或NULL。 感谢您的回复。

1 个答案:

答案 0 :(得分:0)

这是你在找什么?

WITH Result
AS (
SELECT * FROM #TempTable
PIVOT 
(
MAX(I_name) FOR T_name IN ([Bed],[Bowl],[Collar],[Toy]) 
) AS PIvotTable
)
SELECT Dog, Age, Gender, Max(bed) AS [Bed], max(bowl) [Bowl], max(collar) [Collar], Max(Toy) [Toy]
FROM Result
GROUP BY DOG, AGE, GENDER

以上查询的结果:

Result