2014-07-23 113 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