sql server中的行到列

时间:2011-04-11 12:03:16

标签: sql sql-server

我有桌子,它的值是

code Number name
111  a2     'abc'
112  b7     'abc1'
113  a3     'abc2'
113  c5     'abc2'
114  d1     'abc4'
115  s6     'abc3'
116  s9     'a4'
116  s9     'a5'

我想输出我的值是

code     Number1  number2  name
111      a2       Null     'abc'
112      b7       Null     'abc1'
113      a3       C5       'abc2'
114      d1       Null     'abc4'
115      s6       Null     'abc3'
116      s9       'a4'     'a5'

如何从sql Query

中实现

1 个答案:

答案 0 :(得分:0)

我对你的输出感到困惑。 在我看来,代码= 113的行的'number2'列的值来自'Number'列。 而对于包含代码116的行,列'number2'来自'name'列。

我已经开始编写SQL来帮助:

DECLARE @temp table (code INT, Number char(2), Name char(4));
INSERT INTO @temp (code,Number, Name) VALUES (111, 'a2', 'abc')
INSERT INTO @temp (code,Number, Name) VALUES (112, 'b7', 'abc1')
INSERT INTO @temp (code,Number, Name) VALUES (113, 'a3', 'abc2')
INSERT INTO @temp (code,Number, Name) VALUES (113, 'c5', 'abc2')
INSERT INTO @temp (code,Number, Name) VALUES (114, 'd1', 'abc4')
INSERT INTO @temp (code,Number, Name) VALUES (115, 's6', 'abc3')
INSERT INTO @temp (code,Number, Name) VALUES (116, 's9', 'a4')
INSERT INTO @temp (code,Number, Name) VALUES (116, 's9', 'a5')


SELECT T1.code, T1.Number, T2.Number, T1.Name
FROM @temp T1
LEFT JOIN @temp T2 ON T1.code = T2.code AND T1.Number=T2.Number AND T1.Name <> T2.Name
WHERE T1.Number = (SELECT MIN(Number) FROM @temp T3 WHERE T3.code = T1.code)
AND T1.Name =  (SELECT MIN(Name) FROM @temp T4 WHERE T4.code = T1.code);

除了代码为113的行外,哪个输出正常... 你确定你想要的输出???

此致 中号