我正在编写一个将在 .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'
我想知道是否有人能够为我指明正确的方向,因为我在编写这些高级查询方面还相当陌生。
当您使用 SQL Server 2008 时,您也可以使用
PIVOT
,但在我看来,旧式的做法通常更容易。
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
为了完整起见,带有
PIVOT
... 的版本
SELECT SN,
P.[1] AS mi1,
P.[2] AS mi2,
P.[3] AS mi3
/*Should ensure PIVOT source only projects columns that you want to use
for grouping, aggregation or pivoting so not using MAS directly to avoid
unwanted "extra" implicit grouping columns should table get columns added
*/
FROM (SELECT SN, Mindex, MA FROM MAS) PivotSource
PIVOT (MAX(MA) FOR Mindex IN ([1],[2],[3])) AS P