SQL 单列转多列多行!
详情:http://zhidao.baidu.com/question/328644893.html...
详情:http://zhidao.baidu.com/question/328644893.html
展开
2个回答
展开全部
思路:先列出序号。用序号除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
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' 不是可以识别的 函数名。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
以下 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 行受影响)
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 行受影响)
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |