2016-07-28 118 views
0

我需要一些帮助来将附加列中的'comment'和带有where子句的select语句一起添加。选择带有where子句的语句并在另一列中添加'comment'

当前代码

首先声明

SELECT * FROM [Table] WHERE [Dep]  = 'M'  AND 
          ([Join M] <> [Join B] OR 
          [Resign M] <> [Resign Date Beneficiary]) 
GO 

第二条语句

SELECT * FROM [Table] WHERE [Join B] < [Resign B] AND 
          ([Join M] > [Join B] OR 
          [Resign M] < [Resign B]) 
GO 

这是两个不同的select语句,但是我想两个输出组合成一张桌子。

错误的代码 - (例子来解释)

首先声明

SELECT * FROM [Table] WHERE [Dep]  = 'M'  AND 
          ([Join M] <> [Join B] OR 
          [Resign M] <> [Resign Date Beneficiary]) 
SET AS [Comment] = 'Main' 
GO 

第二条语句

SELECT * FROM [Table] WHERE [Join B] < [Resign B] AND 
          ([Join M] > [Join B] OR 
          [Resign M] < [Resign B]) 
SET AS [Comment] = 'Date' 
GO 

的要求是一个额外的列添加到输出并添加'评论'在现场,也可以将两个输出结合在一个表格中。

输出

首先声明输出

[Number] |[Dep] |[Join M] |[Join B] |[Resign M ]|[Resign B] 
10003 |M  |20160101 |20160201 |20160301 |20160301 
10004 |M  |20160101 |20160201 |20160301 |20160401 

第二条语句输出

[Number] |[Dep] |[Join M] |[Join B] |[Resign M ]|[Resign B] 
10000 |M  |20160201 |20160201 |20160131 |20160430 
10002 |M  |20160501 |20160430 |20160430 |20160430 

所需的输出

[Number] |[Dep] |[Join M] |[Join B] |[Resign M ]|[Resign B]|[Comment] 
10000 |M  |20160201 |20160201 |20160131 |20160430 |'Date' 
10002 |M  |20160501 |20160430 |20160430 |20160430 |'Date' 
10003 |M  |20160101 |20160201 |20160301 |20160301 |'Main' 
10003 |M  |20160101 |20160201 |20160301 |20160401 |'Main' 
+0

谢谢你两个答案之间的联盟,他们都是相同的,我需要的准确输出。谢谢。 –

回答

2

使用UNION ALL多个(兼容)结果集相结合,并且可以将SELECT子句中添加额外的表达式

SELECT [Number],[Dep],[Join M],[Join B],[Resign M ],[Resign B],'Main' as Comment 
FROM [Table] WHERE [Dep]  = 'M'  AND 
          ([Join M] <> [Join B] OR 
          [Resign M] <> [Resign Date Beneficiary]) 
UNION ALL 

SELECT [Number],[Dep],[Join M],[Join B],[Resign M ],[Resign B],'Date' as Comment 
FROM [Table] WHERE [Join B] < [Resign B] AND 
          ([Join M] > [Join B] OR 
          [Resign M] < [Resign B]) 

或者,如果这些行代表的Table的全部内容只是想和你分类行作为要么MainDate,你可以使用一个CASE表达:

SELECT [Number],[Dep],[Join M],[Join B],[Resign M ],[Resign B], 
    CASE WHEN [Dep]  = 'M'  AND 
      ([Join M] <> [Join B] OR 
      [Resign M] <> [Resign Date Beneficiary]) 
    THEN 'Main' 
    ELSE 'Date' END as Comment 
FROM [Table] 
1

看来你只是想所有的查询

SELECT 
     [Number] 
    , [Dep] 
    , [Join M] 
    , [Join B] 
    , [Resign M ] 
    , [Resign B] 
    , 'Main' AS comment 
FROM [Table] 
WHERE [Dep] = 'M' 
     AND ([Join M] <> [Join B] 
     OR [Resign M] <> [Resign Date Beneficiary] 
    ) 

UNION ALL 

     SELECT 
      [Number] 
      , [Dep] 
      , [Join M] 
      , [Join B] 
      , [Resign M ] 
      , [Resign B] 
      , 'Date' AS comment 
     FROM [Table] 
     WHERE [Join B] < [Resign B] 
      AND ([Join M] > [Join B] 
       OR [Resign M] < [Resign B] 
       ) 
;