从1表中需要空结果

时间:2014-05-22 09:49:00

标签: sql sql-server-2008

我有一张表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

2 个答案:

答案 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