学习型 ASP/PHP/ASP.NET 主机 30元/年全能 ASP/PHP/ASP.NET 主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付
发新话题
打印

[求助]怎么能让查询结果中的行列互换

[求助]怎么能让查询结果中的行列互换

怎么能让查询结果中的行列互换

例如 select id,name,age,sex from person;
本来显示是 id name age sex
01 xiao 21 男
  02 li  22 女
现在我想让 id 01 02
  name xiao li
  age 21 22
sex 男 女

请问用SQL怎么实现?

TOP

我也不知道

时间可以让人忘记一切,也可以让人记住一切,但是有时候我们缺的就是时间,所以一定要把握每分每秒。

TOP

没有做过,头一回遇见有人想这样做
地球人的缺点与恶习集一身,小心感染不良恶习

TOP

这个没做过

TOP

好强的想象力

TOP

CREATE TABLE T
(
ID VARCHAR(20),
Name VARCHAR(20),
Age INT,
Sex VARCHAR(20)
)

INSERT INTO T
SELECT '01 ', 'xiao ',21, '男 ' UNION ALL
SELECT '02 ', 'li ',22, '女 '
select * from t

DECLARE @sql VARCHAR(8000)
SET @sql = ' '
SELECT @sql =@sql+ ',( '+CASE WHEN PATINDEX( '%[^0-9]% ',COL1) >0 THEN RIGHT(COL1,2) ELSE COL1 END+ ') = MIN(CASE WHEN COL1 = ' ' '+CASE WHEN PATINDEX( '%[^0-9]% ',COL1) >0 THEN RIGHT(COL1,2) ELSE COL1 END+ ' ' ' THEN col2 END) '
FROM
(
SELECT id=0,col1=id,col2=Name FROM t
UNION ALL
SELECT id=1,col1=id,CAST(AGE AS VARCHAR) FROM t
UNION ALL
SELECT id=2,col1=id,SEX FROM t
UNION ALL
SELECT 0, '00id ', 'name '
UNION ALL
SELECT 1, '00id ', 'age '
UNION ALL
SELECT 2, '00id ', 'sex '
) A GROUP BY COL1

SET @sql = STUFF(@sql,1,1, ' ')

EXEC ( 'SELECT '+@sql+ '
FROM
(
SELECT id=0,col1=id,col2=Name FROM t
UNION ALL
SELECT id=1,col1=id,CAST(AGE AS VARCHAR) FROM t
UNION ALL
SELECT id=2,col1=id,SEX FROM t
UNION ALL
SELECT 0, ' 'id ' ', ' 'name ' '
UNION ALL
SELECT 1, ' 'id ' ', ' 'age ' '
UNION ALL
SELECT 2, ' 'id ' ', ' 'sex ' '
) A GROUP BY ID '
)

DROP TABLE T

你微笑的面對整個世界,整個世界也將會微笑的面對你。

TOP

发新话题