我有一张表Test
Cat Art Prc
1 1000 100
2 1000 200
1 1500 150
2 1500 100
1 2000 250
2 2500 250
我如何得到这样的结果:
Art Cat(1) Cat(2)
1000 100 200
1500 150 100
2000 250 NULL
2500 NULL 250
Select Art, ......
From Test
答案 0 :(得分:2)
您可以使用LEFT JOIN或subSELECT。
这应该通过使用LEFT JOIN来解决您的需求
SELECT
t.Art,
tc1.Prc AS Cat1,
tc2.Prc AS Cat2
FROM (SELECT DISTINCT Art FROM Test) t
LEFT JOIN Test tc1 ON tc1.Art=t.Art AND Cat=1
LEFT JOIN Test tc2 ON tc2.Art=t.Art AND Cat=2
您应该注意的一个问题...此查询按预期工作 IF 您在Test(Art,Cat)上拥有唯一或主键。你在问题中没有对此说些什么,但我认为是这样。
如果每个Art - Cat组合有多行,查询将产生奇怪的结果。你必须以某种方式汇总Prc,总和或平均值。
但是如果Cat列可以包含变量值,那么您应该查看CROSSTAB / PIVOT查询。
答案 1 :(得分:0)
Declare @Test Table (Cat Int, Art Int , Prc Int)
Insert @Test (Cat, Art, Prc) Values
(1, 1000, 100),
(2, 1000, 200),
(1, 1500, 150),
(2, 1500, 100),
(1, 2000, 250),
(2, 2500, 250)
;With CTE1 As (
Select Art, Prc FRom @Test Where Cat = 1 ), CTE2 As (
Select Art, Prc FRom @Test Where Cat = 2), CTE3 As (
Select Distinct Art From @Test)
Select CTE3.Art, CTE1.Prc Cat1, CTE2.Prc Cat2
From CTE3
Left Join CTE1 On CTE1.Art = CTE3.Art
Left Join CTE2 On CTE2.Art = CTE3.Art