
sql server 2008如何将同一张表两行变成另一张表或视图的两列 5
例如:表AABCA1B1C1A2B2C2变成表BDEA1A2B1B2C1C2求SQL语句!!!!!!!实际需求是这样子的:有4张表A、B、C、D,A记录了参数的中文名称和...
例如:
表A
A B C
A1 B1 C1
A2 B2 C2
变成
表B
D E
A1 A2
B1 B2
C1 C2
求SQL语句!!!!!!!
实际需求是这样子的:有4张表A、B、C、D,A记录了参数的中文名称和标识号,B记录了标识号(与A的对应)和参数的值,C记录了另一些参数的中文名称和标识号,D记录了标识号(与C对应)和参数的值,我需要的是分别从这四张表取一些参数的中文名称和它对应的参数值出来合并成一张新的表或视图。
例如:
表A:
ID VALUE
1 张三
2 男
表B(A和B的ID对应):
ID NAME
1 姓名
2 性别
表C:
ID VALUE
1 25
2 广东省
表D(D和C的ID对应):
ID NAME
1 年龄
2 地址
我想要将四个表联合起来,达到的效果如下:
NAME VALUE
姓名 张三
性别 男
年龄 25
地址 广东省
不要说直接按效果建个表就行了,实际的表已经有了,就像上面那个四个表(上面四个表只是我简化问题而已,实际的很复杂)那样操蛋。希望高手多多来指教!!! 展开
表A
A B C
A1 B1 C1
A2 B2 C2
变成
表B
D E
A1 A2
B1 B2
C1 C2
求SQL语句!!!!!!!
实际需求是这样子的:有4张表A、B、C、D,A记录了参数的中文名称和标识号,B记录了标识号(与A的对应)和参数的值,C记录了另一些参数的中文名称和标识号,D记录了标识号(与C对应)和参数的值,我需要的是分别从这四张表取一些参数的中文名称和它对应的参数值出来合并成一张新的表或视图。
例如:
表A:
ID VALUE
1 张三
2 男
表B(A和B的ID对应):
ID NAME
1 姓名
2 性别
表C:
ID VALUE
1 25
2 广东省
表D(D和C的ID对应):
ID NAME
1 年龄
2 地址
我想要将四个表联合起来,达到的效果如下:
NAME VALUE
姓名 张三
性别 男
年龄 25
地址 广东省
不要说直接按效果建个表就行了,实际的表已经有了,就像上面那个四个表(上面四个表只是我简化问题而已,实际的很复杂)那样操蛋。希望高手多多来指教!!! 展开
2013-03-15
展开全部
CREATE TABLE #A (
A char(2),
B char(2),
C char(2)
);
INSERT INTO #A
SELECT 'A1', 'B1', 'C1' UNION ALL
SELECT 'A2', 'B2', 'C2';
GO
WITH myCTE AS(
SELECT
ROW_NUMBER() OVER( ORDER BY (SELECT 1)) AS NO,
A,B,C
FROM
#A
)
SELECT
MAX( CASE WHEN NO = 1 THEN A ELSE NULL END ) D,
MAX( CASE WHEN NO = 2 THEN A ELSE NULL END ) E
FROM
myCTE
UNION ALL
SELECT
MAX( CASE WHEN NO = 1 THEN B ELSE NULL END ) D,
MAX( CASE WHEN NO = 2 THEN B ELSE NULL END ) E
FROM
myCTE
UNION ALL
SELECT
MAX( CASE WHEN NO = 1 THEN C ELSE NULL END ) D,
MAX( CASE WHEN NO = 2 THEN C ELSE NULL END ) E
FROM
myCTE
GO
D E
-- --
A1 A2
B1 B2
C1 C2
==========
SELECT
B.NAME,
A.VALUE
FROM
A JOIN B
ON ( A.ID = B.ID )
UNION ALL
SELECT
D.NAME,
C.VALUE
FROM
C JOIN D
ON ( C.ID = C.ID )
A char(2),
B char(2),
C char(2)
);
INSERT INTO #A
SELECT 'A1', 'B1', 'C1' UNION ALL
SELECT 'A2', 'B2', 'C2';
GO
WITH myCTE AS(
SELECT
ROW_NUMBER() OVER( ORDER BY (SELECT 1)) AS NO,
A,B,C
FROM
#A
)
SELECT
MAX( CASE WHEN NO = 1 THEN A ELSE NULL END ) D,
MAX( CASE WHEN NO = 2 THEN A ELSE NULL END ) E
FROM
myCTE
UNION ALL
SELECT
MAX( CASE WHEN NO = 1 THEN B ELSE NULL END ) D,
MAX( CASE WHEN NO = 2 THEN B ELSE NULL END ) E
FROM
myCTE
UNION ALL
SELECT
MAX( CASE WHEN NO = 1 THEN C ELSE NULL END ) D,
MAX( CASE WHEN NO = 2 THEN C ELSE NULL END ) E
FROM
myCTE
GO
D E
-- --
A1 A2
B1 B2
C1 C2
==========
SELECT
B.NAME,
A.VALUE
FROM
A JOIN B
ON ( A.ID = B.ID )
UNION ALL
SELECT
D.NAME,
C.VALUE
FROM
C JOIN D
ON ( C.ID = C.ID )
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
select A1,A2 FROM 表名
group by A1,A2
group by A1,A2
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你这不科学啊?如果有更多行要怎么显示呢?你还是说说具体需求来得合理
再有个李四你怎么显示?
NAME VALUE
姓名 张三
姓名 李四?
性别 男
年龄 25
地址 广东省
NAME VALUE NAME VALUE
姓名 张三 姓名 李四?
性别 男
年龄 25
地址 广东省
再有个李四你怎么显示?
NAME VALUE
姓名 张三
姓名 李四?
性别 男
年龄 25
地址 广东省
NAME VALUE NAME VALUE
姓名 张三 姓名 李四?
性别 男
年龄 25
地址 广东省
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-03-13
展开全部
行列转换问题……学习使用百度!行列转换百度很多例子,可以参考学习下
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询