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)
我认为您正在寻找“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)
| 归档时间: |
|
| 查看次数: |
373 次 |
| 最近记录: |