CASE 串表问题请教

minsunkye 2017-11-14 08:58:54
请教各位,串两个表,字段不一样,如何实现
select (case C WHEN 1 THEN A1+A2 WHEN 2 THEN B1+B2 END) FROM (CASE C WHEN 1 THEN A WHEN 2 THEN B END)
RIGHT JOIN C ON (CASE C WHEN 1 THEN A1=C1 AND A2=C2 WHEN 2 THEN B1=C1 AND B2=C2) WHERE C9='XXX'
...全文
183 11 点赞 打赏 收藏 举报
写回复
11 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
道素 2017-11-16
引用 10 楼 minsunkye 的回复:
[quote=引用 8 楼 wwfxgm 的回复:] [quote=引用 7 楼 ch21st 的回复:] 如果我没理解错,你是想根据不同的c值,执行不同的SQL,所以case中C应该是个传入参数 这种情况用动态语句比较适合

DECLARE @c INT ,@sql VARCHAR(max)
SET @c=1
SET @sql='SELECT '+ CASE @C WHEN 1 THEN 'A1+A2' WHEN 2 THEN 'B1+B2' END +' AS c
FROM '+ CASE @C WHEN 1 THEN 'A' WHEN 2 THEN 'B' END+'
RIGHT JOIN C ON '+ CASE @C WHEN 1 THEN 'A1=C1 AND A2=C2' WHEN 2 THEN 'B1=C1 AND B2=C2' END +' WHERE C9=''XXX'''
PRINT  @sql
EXEC(@sql)
@c=1和2 分别执行下面两个语句

1.
SELECT A1+A2 AS c
FROM A
RIGHT JOIN C ON A1=C1 AND A2=C2 WHERE C9='XXX'

2.
SELECT B1+B2 AS c
FROM B
RIGHT JOIN C ON B1=C1 AND B2=C2 WHERE C9='XXX'

楼主赶紧结帖。这个超级强大啊。[/quote] 谢谢你!你的第一种基本符合,但C表中的C1=1是通过查询才得知是什么的,C1有1、2、3、4四种形态分别串四张表。再盼赐教[/quote] 还是没有完全理解你的需求,也就是@c的值存在一个表中,那么肯定有个条件决定取这个表的那一行数据 你先把这个满足条件的那个值取出来赋值给变量就行了 另外其实我觉得你这很多hard code的条件,如相关表名,关联条件等哪些字符串固定常量,是否都可以存在你那个保存c1表中呢 这样当你取得包含C1的记录是,相关的信息一并拿出并按照实现约定组合乘一个SQL脚本呢? 否则岂不是每增加一个C1,比就要修改程序代码
  • 打赏
  • 举报
回复
道素 2017-11-15
如果我没理解错,你是想根据不同的c值,执行不同的SQL,所以case中C应该是个传入参数 这种情况用动态语句比较适合

DECLARE @c INT ,@sql VARCHAR(max)
SET @c=1
SET @sql='SELECT '+ CASE @C WHEN 1 THEN 'A1+A2' WHEN 2 THEN 'B1+B2' END +' AS c
FROM '+ CASE @C WHEN 1 THEN 'A' WHEN 2 THEN 'B' END+'
RIGHT JOIN C ON '+ CASE @C WHEN 1 THEN 'A1=C1 AND A2=C2' WHEN 2 THEN 'B1=C1 AND B2=C2' END +' WHERE C9=''XXX'''
PRINT  @sql
EXEC(@sql)
@c=1和2 分别执行下面两个语句

1.
SELECT A1+A2 AS c
FROM A
RIGHT JOIN C ON A1=C1 AND A2=C2 WHERE C9='XXX'

2.
SELECT B1+B2 AS c
FROM B
RIGHT JOIN C ON B1=C1 AND B2=C2 WHERE C9='XXX'

  • 打赏
  • 举报
回复
minsunkye 2017-11-15
引用 8 楼 wwfxgm 的回复:
[quote=引用 7 楼 ch21st 的回复:] 如果我没理解错,你是想根据不同的c值,执行不同的SQL,所以case中C应该是个传入参数 这种情况用动态语句比较适合

DECLARE @c INT ,@sql VARCHAR(max)
SET @c=1
SET @sql='SELECT '+ CASE @C WHEN 1 THEN 'A1+A2' WHEN 2 THEN 'B1+B2' END +' AS c
FROM '+ CASE @C WHEN 1 THEN 'A' WHEN 2 THEN 'B' END+'
RIGHT JOIN C ON '+ CASE @C WHEN 1 THEN 'A1=C1 AND A2=C2' WHEN 2 THEN 'B1=C1 AND B2=C2' END +' WHERE C9=''XXX'''
PRINT  @sql
EXEC(@sql)
@c=1和2 分别执行下面两个语句

1.
SELECT A1+A2 AS c
FROM A
RIGHT JOIN C ON A1=C1 AND A2=C2 WHERE C9='XXX'

2.
SELECT B1+B2 AS c
FROM B
RIGHT JOIN C ON B1=C1 AND B2=C2 WHERE C9='XXX'

楼主赶紧结帖。这个超级强大啊。[/quote] 谢谢你!你的第一种基本符合,但C表中的C1=1是通过查询才得知是什么的,C1有1、2、3、4四种形态分别串四张表。再盼赐教
  • 打赏
  • 举报
回复
minsunkye 2017-11-15
A\B\C 是3张表
  • 打赏
  • 举报
回复
wwfxgm 2017-11-15
引用 7 楼 ch21st 的回复:
如果我没理解错,你是想根据不同的c值,执行不同的SQL,所以case中C应该是个传入参数 这种情况用动态语句比较适合

DECLARE @c INT ,@sql VARCHAR(max)
SET @c=1
SET @sql='SELECT '+ CASE @C WHEN 1 THEN 'A1+A2' WHEN 2 THEN 'B1+B2' END +' AS c
FROM '+ CASE @C WHEN 1 THEN 'A' WHEN 2 THEN 'B' END+'
RIGHT JOIN C ON '+ CASE @C WHEN 1 THEN 'A1=C1 AND A2=C2' WHEN 2 THEN 'B1=C1 AND B2=C2' END +' WHERE C9=''XXX'''
PRINT  @sql
EXEC(@sql)
@c=1和2 分别执行下面两个语句

1.
SELECT A1+A2 AS c
FROM A
RIGHT JOIN C ON A1=C1 AND A2=C2 WHERE C9='XXX'

2.
SELECT B1+B2 AS c
FROM B
RIGHT JOIN C ON B1=C1 AND B2=C2 WHERE C9='XXX'

楼主赶紧结帖。这个超级强大啊。
  • 打赏
  • 举报
回复
在路上_- 2017-11-14

SELECT (CASE C WHEN 1 THEN A1+A2 WHEN 2 THEN B1+B2 END)
FROM C LEFT JOIN A ON A1=C1 AND A2=C2
  LEFT JOIN B ON B1=C1 AND B2=C2
WHERE C9='XXX'
  • 打赏
  • 举报
回复
在路上_- 2017-11-14
有A、B、C三张表,C是表中一个字段吗?是那张表的字段?
  • 打赏
  • 举报
回复
二月十六 2017-11-14
没太看明白,这个意思?
SELECT  CASE WHEN C = 1 THEN A1 + A2
             WHEN C = 2 THEN B1 + B2
             ELSE B1 + B2
        END
FROM    表
建议楼主列出表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。 参考一下这个贴子的提问方式http://bbs.csdn.net/topics/320211382
  • 打赏
  • 举报
回复
minsunkye 2017-11-14
补充说明,当c 为1 我要返回 A1+A2,当c为2 我要返回B1+B2 ,返回通常是一个值,再帮帮忙,谢谢!
  • 打赏
  • 举报
回复
zbdzjx 2017-11-14
C=1的那种情况 union all C=2的那种情况
  • 打赏
  • 举报
回复
顺势而为1 2017-11-14
case C WHEN 1 这个 C是哪个表中的字段 ?
  • 打赏
  • 举报
回复
相关推荐
发帖
疑难问题
加入

2.1w+

社区成员

MS-SQL Server 疑难问题
申请成为版主
帖子事件
创建了帖子
2017-11-14 08:58
社区公告
暂无公告