返回了无意的多行

时间:2014-10-15 10:13:40

标签: sql-server

不是一个精明的SQL程序员,我在接下来的泡菜中。从表中我可以选择如下。

select Sign as Siggy, Value as Greeky from Table
where ID = 1

这给我提供了以下输出。

  Siggy Greeky   a-ish alpha
  b-ish beta
  c-ish gamma

问题在于,由于此处未讨论且不可影响的原因,我需要它是这样的。

  

A-ish B-ish C-ish
  alpha beta gamma

重要的是要注意,我确实知道确认有多少元素(可能是空值)。我可以放心地假设从行映射到的列数是三个或更少。

我尝试通过类似的连接来解决它。

select T1.ID, T1.Value, T2.Value, T3.Value
from Table as T1
join Table as T2 on T2.ID = T1.ID and T2.Siggy = 'b-ish'
join Table as T3 on T3.ID = T1.ID and T2.Siggy = 'c-ish'

这会产生第一行,这是我需要的它重复(并且有些变化)因为,我怀疑, ON 是< em> JOIN 语句对 FROM 无效。

我可以只获得第一行,但它可以让它更优化。怎么样?!

请注意,转移不是这里的方式,因为我已经有一个固定的行转换限制我需要尊重列的输出不是& #39; t超过了这个数字。

1 个答案:

答案 0 :(得分:1)

您在from子句中的表格中缺少Siggy = 'a-ish'的条件。如果将所有术语转换为子查询,查询将变得更加清晰:

select a.ID, a.Value, b.Value, c.Value
from   (SELECT ID, Value
        FROM   Table
        WHERE  Sign = 'a-ish') a
join   (SELECT ID, Value
        FROM   Table
        WHERE  Sign = 'b-ish') b ON a.ID = b.ID
join   (SELECT ID, Value
        FROM   Table
        WHERE  Sign = 'c-ish') c ON a.ID = c.ID