行到SQL Server查询列

时间:2011-09-23 20:21:55

标签: sql sql-server select

我正在编写一个将在.NET应用程序中使用的查询,因此我希望SQL Server 2008为我做大部分处理,而不是运行应用程序的客户端PC。

我试图从具有索引值的单个表中获取数据,基于该索引值,我希望该项放置在特定列中。

以下是一个例子:

表MAS:

MA      SN      Mindex
B275    7A1515  1
B276    7A1515  2
E530    7A1515  3
B291    7A1519  1
B292    7A1519  2
E535    7A1519  3
B301    7A2515  1
B302    7A2515  2
B331    7A2519  1
B332    7A2519  2

这是我想要的输出:

 SN      mi1     mi2     mi3
 7A1515  B275    B276    E530
 7A1519  B291    B292    E535
 7A2515  B301    B302    null
 7A2519  B331    B332    null

我尝试执行以下查询,它适用于具有3个索引的项目,但如果只有两个,则使用随机数据填充它。

 select mas1.SN, mas1.MA as mi1,mas2.MA as mi2, mas3.MA as mi3
 from MAS ma1, MAS ma2, MAS ma3
 where mas1.SN = '7A1515' and mas1.Mindex = '1' and mas2.Mindex = '2' and mas3.Mindex = '3'

我想知道是否有人能够指出我正确的方向,因为我在撰写这些高级查询时仍然相当新。

1 个答案:

答案 0 :(得分:5)

正如您在SQL Server 2008上一样,您也可以使用PIVOT,但旧式的方式通常更容易IMO。

SELECT 
    SN,
    MAX(CASE WHEN Mindex=1 THEN MA END) AS mi1,
    MAX(CASE WHEN Mindex=2 THEN MA END) AS mi2,
    MAX(CASE WHEN Mindex=3 THEN MA END) AS mi3
FROM MAS
GROUP BY SN