SQL 单列转多列多行!

第1个回答  2011-10-11
思路:先列出序号。用序号除4取余,余1就排在字段名称1下,余2就排在字段名称2下,楼主姐姐是这个意思吗?

select
case when ID%4=1 then 字段名称 end as 字段名称1
,case when ID%4=2 then 字段名称 end as 字段名称2
,case when ID%4=3 then 字段名称 end as 字段名称3
,case when ID%4=0 then 字段名称 end as 字段名称4
from
(select row_number() over(order by 字段名称) as ID, * from 表) as tb追问

'row_number' 不是可以识别的 函数名。

第2个回答  推荐于2016-01-07
以下 SQL 在 SQL Server 2008 Express 版本下,测试通过。

CREATE TABLE #temp (
name VARCHAR(10)
);

INSERT INTO #temp
SELECT '中国' UNION ALL
SELECT '美国' UNION ALL
SELECT '英国' UNION ALL
SELECT '德国' UNION ALL
SELECT '马来西亚' UNION ALL
SELECT '泰国' UNION ALL
SELECT '西班牙' UNION ALL
SELECT '越南' UNION ALL
SELECT '韩国' UNION ALL
SELECT '日本'
GO

SELECT
MAX( CASE WHEN Name_ID = 1 THEN name ELSE '' END ) AS 字段名称1,
MAX( CASE WHEN Name_ID = 2 THEN name ELSE '' END ) AS 字段名称2,
MAX( CASE WHEN Name_ID = 3 THEN name ELSE '' END ) AS 字段名称3,
MAX( CASE WHEN Name_ID = 0 THEN name ELSE '' END ) AS 字段名称4
FROM
(
SELECT
(ROW_NUMBER() OVER ( ORDER BY (SELECT 1) ) - 1) / 4 AS Line,
ROW_NUMBER() OVER ( ORDER BY (SELECT 1) ) % 4 AS Name_ID,
name
FROM
#temp
) SubQuery
GROUP BY
Line
GO

执行结果:

字段名称1 字段名称2 字段名称3 字段名称4
---------- ---------- ---------- ----------
中国 美国 英国 德国
马来西亚 泰国 西班牙 越南
韩国 日本

(3 行受影响)本回答被提问者采纳
相似回答