可重用查询

Nad*_*ard 2 sql-server t-sql sql-server-2008-r2

我有 3 个具有完全相同 DDL 的表(我知道这是一个可怕的设置),但每个表都有不同的字段值。我希望能够为所有 3 个选择编写一个查询,而不是必须使用 3 个不同的选择查询。这是示例 DDL 和单个查询,可以将其合并为 1 个查询吗?

Create Table InfoForJane
(
  genid int IDENTITY(1,1) PRIMARY KEY
  ,name varchar(500)
  ,numofdays varchar(100)
)
Create Table InfoForJoe
(
  genid int IDENTITY(1,1) PRIMARY KEY
  ,name varchar(500)
  ,numofdays varchar(100)
)
Create Table InfoForJessie
(
  genid int IDENTITY(1,1) PRIMARY KEY
  ,name varchar(500)
  ,numofdays varchar(100)
)
Run Code Online (Sandbox Code Playgroud)

以下是我希望合并为一个的查询

Select 
genid
,name
,case
  when numofdays NOT IN ('1-3','4-6','7-9') then '1-3'
  else numofdays
end As [NumofDays]
from rashapa.munich.dbo.InfoForJane

Select
genid
,name
,case
  when numofdays NOT IN ('1-5','6-10','11-14') then '1-5'
  else numofdays
end As [NumofDays]
from rashapa.munich.dbo.InfoForJoe

Select 
genid
,name
,case
  when numofdays NOT IN ('1-2','3-8','8-12') then '1-2'
  else numofdays
end As [NumofDays]
from rashapa.munich.dbo.InfoForJessie
Run Code Online (Sandbox Code Playgroud)

Jon*_*ite 8

我认为您正在寻找“UNION ALL”运算符。请参阅下面的示例。如果您打算大量使用它,您甚至可以将其转换为视图,然后查询该视图。我添加了一个列“SourceTable”,但这是我在做这样的事情时的个人偏好,您的需求可能会有所不同,并且对于您的环境可能是多余的。

SELECT  genid
      , name
      , SourceTable = 'InfoForJane'
      , CASE WHEN numofdays NOT IN ( '1-3', '4-6', '7-9' ) THEN '1-3'
             ELSE numofdays
        END AS [NumofDays]
FROM    rashapa.munich.dbo.InfoForJane
UNION ALL
SELECT  genid
      , name
      , SourceTable = 'InfoForJoe'
      , CASE WHEN numofdays NOT IN ( '1-5', '6-10', '11-14' ) THEN '1-5'
             ELSE numofdays
        END AS [NumofDays]
FROM    rashapa.munich.dbo.InfoForJoe
UNION ALL
SELECT  genid
      , name
      , SourceTable = 'InfoForJessie'
      , CASE WHEN numofdays NOT IN ( '1-2', '3-8', '8-12' ) THEN '1-2'
             ELSE numofdays
        END AS [NumofDays]
FROM    rashapa.munich.dbo.InfoForJessie;
Run Code Online (Sandbox Code Playgroud)