2013-10-07 51 views
-5

請你能不能幫得到查詢見下表SQL查詢,以顯示與最小值,最大值和平均值的列從表

A B C D 
----------------- 
    1 5 7 -5 
    2 6 8 7 

我需要的最小值,最大值和平均值爲所有列垂直列出。輸出應該如下。 X,X,X只是樣本字母,而不是實際的最小值,最大值和平均值。

CN Min Max AVG 
---------------------- 
A X X  X 
B X X  X 
C X X  X 
D X X  X 

CN =列名

誰能給我這個查詢?

+0

是howework ??? –

+1

顯示你的嘗試或查詢來解決這個問題。 –

+0

我是新來的sql查詢,試圖從sql使用max,min,avg函數,但輸出樣式我所期望的與上述輸出不同。 – Reyaz

回答

1

事情是這樣的,也許:

;WITH CTE 
(
SELECT 'A' as CN, tbl.a as nbr FROM tbl UNION ALL 
SELECT 'B', tbl.b FROM tbl UNION ALL 
SELECT 'C', tbl.c FROM tbl UNION ALL 
SELECT 'D', tbl.d FROM tbl 
) 
SELECT 
    CTE.CN, 
    MAX(CTE.nbr) AS Max, 
    MIN(CTE.nbr) AS Min, 
    AVG(CTE.nbr) AS Avg 
FROM 
    CTE 
GROUP BY 
    CTE.CN 

或用UNPIVOT

SELECT 
    unpvt.CN, 
    MAX(unpvt.nbr) AS Max, 
    MIN(unpvt.nbr) AS Min, 
    AVG(unpvt.nbr) AS Avg 
FROM 
(
    SELECT 
     tbl.a, 
     tbl.b, 
     tbl.c, 
     tbl.d 
    FROM 
     tbl 
) AS p 
UNPIVOT 
(
    nbr FOR CN IN 
    (a,b,c,d) 
) AS unpvt 
GROUP BY 
    unpvt.CN 
0

請嘗試:

SELECT DISTINCT 
    CN, 
    MIN(Col) over (partition by CN) [Min], 
    MAX(Col) over (partition by CN) [Max], 
    AVG(Col) over (partition by CN) [Avg] 
FROM 
    (SELECT * 
    FROM YourTable) p 
UNPIVOT 
    (Col FOR CN IN 
     (A, B, C, D) 
)AS unpvt; 
+0

只是要添加,我有數據像這樣的「-1E + 30」,它不給出準確的值。如何避免使用這些類型的值來計算值? – Reyaz

相關問題