【问题标题】:subquery returns multiple results子查询返回多个结果
【发布时间】:2017-07-11 21:59:29
【问题描述】:

我有 3 个表,如果我执行,我会从一个临时表中收集数据

从 #TempTable 中选择 * 我明白了

犬龄 性别 T_id I_name T_name Fiddo 4 M 1 舒适床 Daisy 7 F 1 红色垫床 蓬松 1 M 1 旧地毯床 Fiddo 4 M 2 碗带爪碗 Daisy 7 F 2 中餐盘碗 Fiddo 4 M 4 花式皮革衣领衣领 串领上的 Daisy 7 F 4 名牌 蓬松 1 M 4 定制印章马丁格尔衣领 Daisy 7 F 3 蓝球玩具 蓬松 1 M 3 耐嚼骨头玩具

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

选择不同的狗, 年龄, 性别, BED = COALESCE((从#TempTable 中选择 I_name,其中 DOG = DOG 和 T_name = 'bed'),NULL), BOWL = COALESCE((从#TempTable 中选择 I_name,其中 DOG = DOG 和 T_name = 'bowl'),NULL), TOY = COALESCE((从#TempTable 中选择 I_name,其中 DOG = DOG 和 T_name = 'toy'),NULL), COLLAR = COALESCE((从#TempTable 中选择 I_name,其中 DOG = DOG 和 T_name = 'collar'),NULL) 来自#TempTable 我收到错误

子查询返回超过 1 个值。当子查询跟随 =、!=、、>= 或子查询用作表达式时,这是不允许的。

因为据我所知,DOG 没有解析为一个值,所以我无法正确使用 DOG 的行值?我想要 Daisy、Fiddo 和 Fluffy 的结果集中有 3 行,如果他们有年龄、性别、床、碗(如果他们有一个或 NULL)、他们的项圈和他们的玩具(如果他们有一个或 NULL)。 感谢您的任何回复。

【问题讨论】:

  • SELECT 中的子查询只能返回一个值。您的子查询显然返回不止一行。
  • 您能否为此查询提供输出示例数据:Select I_name from #TempTable where DOG = DOG and T_name = 'bed'
  • 每个子查询必须只返回一个值才能将值存储在选择中。条件 DOG = DOG 是导致错误的原因。

标签: sql subquery


【解决方案1】:

这是你要找的吗?

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

以上查询结果:

【讨论】:

  • 感谢对数据透视表不熟悉的好奇小子,我得分析一下你做了什么
猜你喜欢
  • 2023-04-09
  • 2010-09-25
  • 2020-10-23
  • 2020-11-25
  • 2015-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-30
相关资源
最近更新 更多