2014-07-23 112 views
1

在SQL Server中,請告訴我如何獲得最大列數。SQL Server:如何獲得最大列數

數據:

QRY_ID | SUBJECT1 | SUBJECT2 | .......................... SUBJECT20 
------------------------------------------------------------------------------ 
    A  | 100  | 15  | ..........................  120 
    B  | 200  | 32  | ..........................  140 
    C  | 32  | 29  | ..........................  230 
    D  | 78  | 61  | ..........................  420 
    E  | 99  | 30  | ..........................  20 

期望的結果:

QRY_ID | MAX(SUBJECT) | 
-------------------------- 
    A  | 120 | 
    B  | 200 | 
    C  | 230 |  
    D  | 420 |  
    E  | 99  | 

謝謝〜!

+0

你的問題是相當模糊的。你想要所有列的總數,每行所有列的最高值還是最後一列的值? – Darrell

回答

3

如果您正在使用一個版本的SQL Server支持UNPIVOT,您可以嘗試:

SELECT  QRY_ID, MAX([VALUE]) AS [MAX(SUBJECT)] 
FROM  MyTable 
UNPIVOT 
(
    [VALUE] 
    FOR SUBJECT IN (SUBJECT1, SUBJECT2,...SUBJECTX) 
) up 
GROUP BY QRY_ID; 

否則:

SELECT  QRY_ID, MAX(SUBJECT) AS [MAX(SUBJECT)] 
FROM 
(
    SELECT QRY_ID, SUBJECT1 AS SUBJECT FROM MyTable 
    UNION ALL 
    SELECT QRY_ID, SUBJECT2 AS SUBJECT FROM MyTable 
    UNION ALL 
    ... 
    SELECT QRY_ID, SUBJECTX AS SUBJECT FROM MyTable 
) t 
GROUP BY QRY_ID; 
+0

感謝您的幫助! – hyekyung

1

試試這個:

SELECT qry_id,MAX(subject1) FROM t GROUP BY qry_id 

SqlFiddle(http://sqlfiddle.com/#!3/69643/2)模式和樣本數據:

CREATE TABLE t 
    (
    qry_id varchar(1), 
    subject1 int 
    ); 

INSERT INTO t 
(qry_id, subject1) 
VALUES 
('A', 99), 
('A', 100), 
('E', 200), 
('E', 40), 
('D', 23), 
('X', 60), 
('B', 10); 

結果:

QRY_ID MAX_SUBJECT1 
A  100 
B  10 
D  23 
E  200 
X  60