在SQL Server中的select语句结果中创建其他行

在SQL Server中的select语句结果中创建其他行,sql,sql-server,case,rows,Sql,Sql Server,Case,Rows,我正在创建一个相当复杂的SELECT查询,其中包含跨多个表和视图的连接。主表与几个辅助表连接。行的结果集需要根据两种场景的大约25个案例语句条件进一步拆分: 其中,检查一列的特定值,根据该值,必须为几列创建具有某些唯一值的新行 其中,必须选中使用AND条件的两列才能创建新行 以下是一个例子: SELECT col1, col2, col3, col25, col26, col27, col48 FROM T1 INNER JOIN Table2 on Table2.col1 = T1.col1

我正在创建一个相当复杂的SELECT查询,其中包含跨多个表和视图的连接。主表与几个辅助表连接。行的结果集需要根据两种场景的大约25个案例语句条件进一步拆分:

  • 其中,检查一列的特定值,根据该值,必须为几列创建具有某些唯一值的新行
  • 其中,必须选中使用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与来自内部联接的列(表2.ColA)进行比较,这是需要我的案例条件的地方,大约有25个:

    CASE WHEN Table2.ColA = 'W-%' THEN Col25 = 'WATER'
    
    我还需要在其中插入一行或多行

    Col25 = 'REL', 
    Col26 = 5000,
    Col27 = 'M'
    
    基本上,CASE表达式应该做的是替换SELECT语句中的结果行的值,并插入一个或多个Col25、Col26、Col27具有不同值的行,同时保持其他列值与SELECT语句返回的列值相同

    我知道这可能不仅仅涉及select语句,而且可能需要遍历包含主查询结果的游标才能创建新闻行。这是我唯一的路线吗?如果您有任何帮助或建议,我们将不胜感激。

    选项1

    with q as ( -- your query
        select ...
    )
    select * from q
    union all
    select ... from q
    where <conditions requiring a copy>
    

    对于输出列,您需要类似的
    案例
    来区分原始行和新行。

    如果您以一些示例数据的形式提供问题的简化版本,这会有所帮助。正在创建表和值插入sql语句的示例数据。请帮助您:。不清楚您的问题:1。“一些列的一些唯一值”是什么意思?举个例子吧。2.您的意思是两列必须具有特定值才能触发条件吗。光标通常是最后一个选择,只有在所有其他选项都较差时才应使用。您需要为我们提供一些您试图实现的原型/示例。我添加了一个代码示例。不确定这是否足够。只需将case语句放在select子句中?我很困惑什么不起作用,你试图做什么,你想完成什么<代码>选择Col24,当Table2.ColA='W-%时为大小写,然后选择'WATER'作为Col25,5000作为Col26,选择'M'作为Col27,Table3.col29。。。你想要什么,我就试试第一种方法。如果要复制多行,是否需要多个“union all”语句和查询?如果需要多个副本,则需要多个union。但是如果要复制不同的行,则不需要。
    inner join (values ('org'), ('new')) copy(flag) on flag = 'org' or
        flag = 'new' and 1 = case
            when col25 = 'A' then 1
            when col25 = 'B' and col26 = 'X' then 1
            ...
        end