请高手指教一个菜鸟问题哦~

[复制链接]
查看11 | 回复4 | 2006-9-1 20:36:36 | 显示全部楼层 |阅读模式
id cls_code booked
1 a
5
1 b
10
1 c
8
2
a
7
这是a表
id flt_num
1 9901
1 9901
1 9901
2 9902
这是b表
现想从两表中提取数据,并直接展示为以下结果
flt_numabc
9901 5108
9902 7

请问要怎么写语句呢? 如果用CASE WHEN语句的话,能不能不用CANSE CLS_CODE WHEN 'A' THEN BOOKED ,因为我的CLS_CODE项有很多行,且每个ID下其CLS_CODE项都是一样的,能不能用语句直接让CLS_CODE中各项依次显示而不用列举呢,多谢大师们
回复

使用道具 举报

千问 | 2006-9-1 20:36:36 | 显示全部楼层
try:

/*
id cls_code booked
1 a 5
1 b 10
1 c 8
2 a 7
这是a表
id flt_num
1 9901
1 9901
1 9901
2 9903
flt_num a b c
9901 5 10 8
9902 7
*/
CREATE TABLE #T1([id] int,cls_code char(2),booked int)
CREATE TABLE #T2([id] int,flt_num int)
INSERT INTO #T1
SELECT 1,'a',5 UNION ALL
SELECT 1,'b',10 UNION ALL
SELECT 1,'c',8 UNION ALL
SELECT 2,'a',7
INSERT INTO #T2
SELECT 1,9901 UNION ALL
SELECT 1,9901 UNION ALL
SELECT 1,9901 UNION ALL
SELECT 2,9902
SELECT A.flt_num,B.a,B.b,B.c FROM

(SELECT [id],flt_num FROM #T2 GROUP BY [id],flt_num) AS A INNER JOIN

(SELECT [id],SUM(CASE cls_code WHEN 'a' THENbooked ELSE 0 END) AS 'a'

,SUM(CASE cls_code WHEN 'b' THENbooked ELSE 0 END) AS 'b'

,SUM(CASE cls_code WHEN 'c' THENbooked ELSE 0 END) AS 'c'

FROM #T1 GROUP BY [id]) AS B

ON B.[id]=A.[id]
DROP TABLE #T1,#T2
复制代码
回复

使用道具 举报

千问 | 2006-9-1 20:36:36 | 显示全部楼层
给的数据是不是有点错?
用case when可以实现。
回复

使用道具 举报

千问 | 2006-9-1 20:36:36 | 显示全部楼层
这个是举例数据 B表里的9902应该是9903
回复

使用道具 举报

千问 | 2006-9-1 20:36:36 | 显示全部楼层
象这种的需求还是借助T_SQL编程来实现
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行