SQL 多表连接 动态列 查询

低调的感觉 2012-01-31 10:56:53
三张表如下:
CREATE TABLE [dbo].[YM_Column](
[YM_Column_ID] [int] IDENTITY(1,1) NOT NULL,
[YM_Column_Name] [varchar](50) COLLATE Chinese_PRC_CI_AS NULL,
[YM_Column_Date] [varchar](50) COLLATE Chinese_PRC_CI_AS NULL
)


CREATE TABLE [dbo].[YM_Row](
[YM_Row_ID] [int] IDENTITY(1,1) NOT NULL,
[YM_Row_Name] [varchar](50) COLLATE Chinese_PRC_CI_AS NULL,
[YM_Row_PID] [int] NULL
)

CREATE TABLE [dbo].[YM_Test](
[YM_Test_ID] [int] IDENTITY(1,1) NOT NULL,
[YM_Row_ID] [varchar](50) COLLATE Chinese_PRC_CI_AS NULL,
[YM_Column_ID] [int] NULL,
[YM_Test_Value1] [varchar](50) COLLATE Chinese_PRC_CI_AS NULL,
[YM_Test_Value2] [varchar](50) COLLATE Chinese_PRC_CI_AS NULL
)

数据如下:
[dbo].[YM_Column]

YM_Column_ID YM_Column_Name YM_Column_Date
------------ -------------------------------------------------- ------------------------
1 第一期 1月~3月
2 第二期 4月~6月
3 第三期 7月~9月
4 第四期 10月~12月

===============================================================================
[dbo].[YM_Row]

YM_Row_ID YM_Row_Name YM_Row_PID
----------- -------------------------------------------------- -----------
1 人工费 0
2 高级人员 1
3 初级人员 1
4 其他费用 0
5 差旅费 4
6 住宿费 5
7 餐补 5
8 车辆费 4
9 修理费 8
10 燃油费 8

===============================================================================
[dbo].[YM_Test]

YM_Test_ID YM_Row_ID YM_Column_ID YM_Test_Value1 YM_Test_Value2
----------- --------------- ------------ --------------- -----------------
1 2 1 300 280
2 3 1 200 NULL
3 2 2 320 NULL
4 6 1 180 NULL
5 7 1 60 NULL
6 9 1 120 NULL
7 10 1 160 NULL


以上是数据和表结构,想要的结果如下:
...全文
220 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
低调的感觉 2012-02-13
  • 打赏
  • 举报
回复
低调的感觉 2012-02-08
  • 打赏
  • 举报
回复
提的问题 又没有解决。。。。杯具
darkelf21cn 2012-02-02
  • 打赏
  • 举报
回复


Select z.YM_Row_ID
,y.YM_Test_Value1 as 第一期原值
,y.YM_Test_Value2 as 第一期调整值
,x.YM_Test_Value1 as 第二期原值
,x.YM_Test_Value2 as 第二期调整值
,w.YM_Test_Value1 as 第三期原值
,w.YM_Test_Value2 as 第三期调整值
,v.YM_Test_Value1 as 第四期原值
,v.YM_Test_Value2 as 第四期调整值
From YM_Row z
Left join (Select a.YM_Row_ID,b.YM_Test_Value1,b.YM_Test_Value2 From YM_Row a left join YM_Test b on a.YM_Row_ID=b.YM_Row_ID Where b.YM_Column_ID=1) y on z.YM_Row_ID=y.YM_Row_ID
Left join (Select a.YM_Row_ID,b.YM_Test_Value1,b.YM_Test_Value2 From YM_Row a left join YM_Test b on a.YM_Row_ID=b.YM_Row_ID Where b.YM_Column_ID=2) x on z.YM_Row_ID=x.YM_Row_ID
Left join (Select a.YM_Row_ID,b.YM_Test_Value1,b.YM_Test_Value2 From YM_Row a left join YM_Test b on a.YM_Row_ID=b.YM_Row_ID Where b.YM_Column_ID=3) w on z.YM_Row_ID=w.YM_Row_ID
Left join (Select a.YM_Row_ID,b.YM_Test_Value1,b.YM_Test_Value2 From YM_Row a left join YM_Test b on a.YM_Row_ID=b.YM_Row_ID Where b.YM_Column_ID=4) v on z.YM_Row_ID=v.YM_Row_ID
低调的感觉 2012-02-02
  • 打赏
  • 举报
回复
我顶额
现在CSDN的人气是不是变差了
最近发的将近10个贴 基本上都没有得到解决啊
低调的感觉 2012-02-01
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 zhangweitc123 的回复:]
你这是报表吧,怎么开始的列不对应啊
[/Quote]
那图只是一种效果图 里面的值不是从之前的表里取的
但是最终是要根据以上3张表的数据和关系 得到类似效果图的结果
低调的感觉 2012-01-31
  • 打赏
  • 举报
回复
需要用SQL Server2000
叶子 2012-01-31
  • 打赏
  • 举报
回复
友情up,等高手帮你处理一下吧。
q465897859 2012-01-31
  • 打赏
  • 举报
回复
帮顶
zhangweitc123 2012-01-31
  • 打赏
  • 举报
回复
你这是报表吧,怎么开始的列不对应啊
纸风车 2012-01-31
  • 打赏
  • 举报
回复
OH!My God!
anny_gomine 2012-01-31
  • 打赏
  • 举报
回复
过于高深,等高手帮你处理一下吧。
Alessandro_ 2012-01-31
  • 打赏
  • 举报
回复
帮顶!
低调的感觉 2012-01-31
  • 打赏
  • 举报
回复
大伙都还在家过年么?
低调的感觉 2012-01-31
  • 打赏
  • 举报
回复
求救啊。。。只能用sql server2000
  • 打赏
  • 举报
回复

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧