2013-11-22 58 views
0

我真的很感謝我遇到困難的查詢。 下面是一個數據的例子:使用t的樞軸數據sql

DEPT FLAG FLAG2 FLAG3 

100 A    1 
100 A  B 
201 A  1 
201 1  3 
300   Z 
301 5 
301 2  3  FG 

我需要的結果如下:使用上述的數據(不同部門,與包含一個值標誌的總數,和FLAG2),結果返回應該看像:

dept countFlag countFlag2 countFlag3 

100  2   1   1 
201  2   2   0 
300  0   1   0 
301  2   1   1 

100 2,1,1 < ---爲部門100,有包含在標記欄和1包含在FLAG2的值和1,其中包含標誌的值的值的兩行3.

我希望這是有道理的。提前致謝。

+0

你並不需要爲這個樞軸,但如果你這樣做是值得記住的是,SQL語言(任何味道)被設計爲您_will_需要,在至少知道結果集中有多少列。有時候可以推斷出某個列的名稱或類型,但是您仍然需要知道總共有多少列。 –

回答

4

你不需要爲此支點。 Count(Distinct) 足夠

Select Dept, 
     Count(distinct Flag) as countFlag, 
     Count(distinct Flag2) as CountFlag2, 
     Count(distinct Flag3) as CountFlag3 
from dept 
group by Dept 

要包括所有非空字段,使用以下

Select Dept, 
     sum(case flag when null then 0 else 1) as countFlag, 
     sum(case flag2 when null then 0 else 1) as CountFlag2, 
     sum(case flag3 when null then 0 else 1) as CountFlag3 
from dept 
group by Dept 
+0

謝謝,非常接近。但是,它只給我一個部門的不同值的數量。例如:在鞋類部門,我需要知道,在標誌列中有425行,值在標誌2中有300行,值0在標誌3中有值。我不在乎什麼是價值,只是在那裏。唯一不同的是實際的部門名稱。 – Aaron

+0

@AAron,你可以建議任何項目,期望什麼,以及查詢結果有什麼問題?對我來說,似乎根據你返回的結果(雖然沒有執行它) – Tilak

+0

它幾乎工作,(我執行你建議的代碼)。然後,結果回到了正確的部門(不同的),然而,對於部門300的Flag欄,結果是12,它應該超過12,000,因爲部門300有許多行有價值的行,但是,只有12個不同的值。 – Aaron

0

測試數據

CREATE TABLE Table_Name (DEPT INT, 
         FLAG VARCHAR(2) 
         ,FLAG2 VARCHAR(2), 
         FLAG3 VARCHAR(2)) 

INSERT INTO Table_Name(DEPT, FLAG, FLAG2, FLAG3) 
VALUES 
(100,'A',null,'1'), 
(100,'A','B', null), 
(201,'A','1', null), 
(201,'1','3', null), 
(300, null,'Z',null), 
(301,'5',null,null), 
(301,'2','3','FG') 

查詢

SELECT DISTINCT DEPT, COUNT(FLAG) AS FLAG, 
       COUNT(FLAG2) AS FLAG2, COUNT(FLAG3) AS FLAG3 
FROM Table_Name 
GROUP BY DEPT 

結果集

DEPT FLAG FLAG2 FLAG3 
100  2  1  1 
201  2  2  0 
300  0  1  0 
301  2  1  1