【发布时间】:2020-01-31 20:37:13
【问题描述】:
我正在创建一个相当复杂的 SELECT 查询,其中包含跨多个表和视图的连接。主表与多个辅助表连接。行的结果集需要根据大约 25 个 CASE 语句条件进一步拆分,用于两种场景:
- 检查一列的特定值,根据该特定值,必须为几列创建具有一些唯一值的新行;
- 必须检查使用 AND 条件的两列才能创建新行
这是一个例子:
SELECT col1, col2, col3, col25, col26, col27, col48
FROM T1
INNER JOIN Table2 on Table2.col1 = T1.col1
INNER JOIN Table3 on Table3.col2 = T1.col1
Col25 正在与来自 INNER JOIN 的列 (Table2.ColA) 进行比较,这是需要我的 CASE 条件的地方,其中大约有 25 个:
CASE WHEN Table2.ColA = 'W-%' THEN Col25 = 'WATER'
我还需要在
处插入一个或多个额外的行Col25 = 'REL',
Col26 = 5000,
Col27 = 'M'
基本上,CASE 表达式应该做的是从我的 SELECT 语句中替换结果行的值,并插入一个或多个具有不同 Col25、Col26、Col27 值的行,同时保持其他列值与那些相同由 SELECT 语句返回。
我知道这可能不仅仅涉及我的选择语句,并且可能需要遍历包含我的主要查询结果的游标以创建新闻行。这是我唯一可用的路线吗?任何帮助或指示将不胜感激。
【问题讨论】:
-
如果您以一些示例数据的形式提供问题的简化版本,将会有所帮助。示例数据为建表和值插入 sql 语句。
-
让帮助您成为可能:minimal reproducible example.
-
不清楚你在问什么: 1. “一些列的一些唯一值”是什么意思?也许是一些例子。 2.你的意思是2列必须有特定的值才能触发条件? .光标通常是最后的选择,并且只应在所有其他选项都更糟时使用。您需要向我们提供一些您想要实现的原型/示例。
-
我添加了一个代码示例。不确定这是否足够。
-
只是把case语句放在你的select子句中?我很困惑什么不起作用,你试图做什么,以及你想要完成什么。
SELECT Col24, CASE WHEN Table2.ColA = 'W-%' THEN 'WATER' as Col25 , 5000 as Col26, 'M' as Col27, Table3.col29 ... whatever you want
标签: sql sql-server case rows