我正在编写一个将在.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'
我想知道是否有人能够指出我正确的方向,因为我在撰写这些高级查询时仍然相当新。
答案 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