2015-06-29 21 views
1

我一直在試圖放在一起的SQL查詢,顯示每條記錄的一行,並將其他字段的值分解到自己的列中。我如何能夠爲每條記錄顯示多個列和一行?SQL Select - 如何根據字段值顯示多列?

我有類似下面的示例數據表:

+--------------+------------+---------------+ 
| Employee_Num | Client_Num | Deduction_Num | 
+--------------+------------+---------------+ 
|   1305 |  1000 |    1 | 
|   1305 |  1000 |   30 | 
|   1312 |  1000 |    1 | 
|   1320 |  1000 |    1 | 
|   1320 |  1000 |   30 | 
|   1323 |  1000 |   30 | 
|   1323 |  1000 |    1 | 
+--------------+------------+---------------+ 

我試圖工會,但結果仍顯示爲每個員工多條記錄。這是我迄今爲止嘗試:

SELECT Employee_Num, Client_Num, Deduction_1, Deduction_30 
FROM (SELECT 
    Employee_Num, 
    Client_Num, 
    Deduction_Num AS Deduction_1, 
    Deduction_Num AS Deduction_30 
    FROM Employee_Deductions 
    WHERE client_num = 1000 
    AND Deduction_Num IN (1) 
UNION 

    SELECT 
    Employee_Num, 
    Client_Num, 
    Deduction_Num AS Deduction_1, 
    Deduction_Num AS Deduction_30 
    FROM Employee_Deductions 
    WHERE Client_Num, = 1000 
    AND Deduction_Num IN (30) 
) AS Datum 

WHERE Client_Num = 1000 
ORDER BY Employee_Num 

我想這是期望的結果:

+--------------+------------+-------------+--------------+ 
| Employee_Num | Client_Num | Deduction_1 | Deduction_30 | 
+--------------+------------+-------------+--------------+ 
|   1305 |  1000 |   1 |   30 | 
|   1312 |  1000 |   1 |    | 
|   1320 |  1000 |   1 |   30 | 
|   1323 |  1000 |   1 |   30 | 
+--------------+------------+-------------+--------------+ 

任何幫助,將不勝感激。

+0

你越來越相同的多個記錄,或者是有各個領域不同的數據? – Gene

回答

1

爲了從字面上讓你問一個case語句將工作:

select Employee_Num 
    , Client_Num 
    , max(case when deduction_num = 1 then deduction_num end) as Deduction_1 
    , max(case when deduction_num = 30 then deduction_num end) as Deduction_30 
From Employee_Deductions 
Group by Employee_Num 
    , Client_Num 

但它聽起來就像你想要做的就是透視數據按本Technet article什麼。希望有所幫助。

0

你可以試試:

SELECT DISTINCT Employee_Num, 
Client_Num, 
CASE WHEN Deduction_Num = 1 
    THEN 1 
    ELSE '' 
    END Deduction_1, 
CASE WHEN Deduction_Num = 30 
    THEN 30 
    ELSE '' 
    END Deduction_30 
FROM Employee_Deductions 
WHERE Client_Num = 1000 
AND Deduction_Num IN (1,30) 
0

我建議到GROUP BY的Employee_NumClient_num結合你的結果集,計算合成聚合列,你需要他們。 從這個臨時結果集中,您可以派生出具有所需輸出結構的表格,並通過適當組合計算出的總量來填充列。

例子:

SELECT agg.Employee_Num 
    , agg.Client_Num 
    , agg.dmin            Deduction_1 
    , CASE agg.dmax WHEN 30 THEN agg.dmax else NULL END Deduction_30 
    FROM (
      SELECT Employee_Num 
       , Client_Num 
       , MIN (Deduction_Num) dmin 
       , MAX (Deduction_Num) dmax 
       FROM Employee_Deductions 
      GROUP BY Employee_Num 
       , Client_num 
     ) agg 
    ; 
相關問題