sql - 2 sql 使用 UNION 查询 2 个不同的结果
问题描述
我有 2 个查询以相同的表开头但过滤不同的列。两个查询合并在一起,所以我可以得到一个不重复的人的计数。
如果我在注释掉联合的情况下运行查询,则每 1,953 行中的行数相同。当我与工会一起跑步时,我得到了 1,816 和 1,922。
我的数据只是一个帐户#,例如第一列中的 123456 和第二列中的 1/0。帮助我了解如果我从相同数量的行开始会发生这种情况。
这是其中一个查询
select distinct acct#,
case
when (lastFilledDate is not null and lastFilledDate<>'00/00/00') or
([Last Filled DC] is not null and [Last Filled DC]<>'00/00/00') or
(vivitrol is not null and vivitrol <>'00/00/00') or
(sublocade is not null and sublocade <>'00/00/00') or
(naltrexone is not null and naltrexone <>'00/00/00') then 1
else 0 end as result
from
(
select Acct#, DOB, [COE Contact Note], [COE-INTAKA Doc], [COE-MOM
Doc], lastFilledDate, [Last Filled DC],vivitrol,sublocade,naltrexone,
ROW_NUMBER() over (partition by Acct# order by [COE-INTAKA Doc] desc)
as apptRows
from tblAppBSCImportDashCOE2279 as main
where (([COE-MOM Doc]='Yes' and [COE Contact Note] is not null) or
[COE-MOM Doc]='No') and Appt is not null
) as sub
where apptRows=1
union
select distinct acctNo,
case
when
providerMAT='The Wright Center' and [COE-MOM Doc] is not null then
1
else 0
end as result
from
(
select acctNo, [COE-MOM Doc], MAT, providerMAT,
ROW_NUMBER() over (partition by acctNo order by COEBNMOM, [COE-MOM Doc]
desc) as apptRows
from tblAppBSCImportDashCOEHM2544 as main
where [COE-MOM Doc] is not null or COEBNMOM is not null
) as sub
where apptRows=1
结果看起来像 acct# 结果 123456 1 234567 0
解决方案
有一种可能。您选择的记录可能会导致每个 select 语句中的记录重复。让我试着用一个例子来说明。(您可以在会话中输入以下查询以进行跟进)
IF OBJECT_ID('TEMPDB..#TEMP1') IS NOT NULL
DROP TABLE #TEMP1
IF OBJECT_ID('TEMPDB..#TEMP2') IS NOT NULL
DROP TABLE #TEMP2
CREATE TABLE #TEMP1(
id INT
,account INT
,amount INT
,yes_no INT
)
INSERT INTO #TEMP1 (id,account,amount,yes_no)
VALUES(1,123456,5,0)
,(2,123456,10,0)
,(3,123456,20,0)
CREATE TABLE #TEMP2(
id INT
,account INT
,amount INT
,yes_no INT
)
INSERT INTO #TEMP2 (id,account,amount,yes_no)
VALUES(4,123456,5,0)
,(5,123456,10,0)
,(6,123456,20,0)
SELECT *
FROM #TEMP1
SELECT *
FROM #TEMP2
现在假设我编写了选择帐户和“yes_no”列的查询:
SELECT account,yes_no
FROM #TEMP1
SELECT account,yes_no
FROM #TEMP2
您可以看到现在所有记录在每个 select 语句中都是相同的值。那么当我将这些查询合并在一起时,您认为会发生什么?
SELECT account,yes_no
FROM #TEMP1
UNION
SELECT account,yes_no
FROM #TEMP2
UNION 将输出 ENTIRE OUTPUT 的不同值,这也适用于每个查询。这是我认为你正在经历的一个极端例子。您需要为每个查询包含某种 ID,以便可以将其与查询中的其他记录区分开来,例如;
SELECT id,account,yes_no
FROM #TEMP1
UNION
SELECT id,account,yes_no
FROM #TEMP2
推荐阅读
- django - 如何从 Django Admin 中删除 Wagtail Core、图像、文档
- sql - 在 Postgresql 中提取字符串并删除空/空元素
- kubernetes - 如何在 Google Kubernetes Engine 上获取 pod 的 TCP 或 WebSocket 连接数?
- ios - 如何使用 Alamofire (Swift) 获取数组内的嵌套数组
- c# - 如何避免 NotSupportedException?
- android - 我有一个句子,其单词由单个文本视图组成,如何计算 TextView 之间的正确距离?
- python - 是否可以从 bdist 中排除数据文件源和中间文件?
- java - 在两个localdatetime java 8+中转换字符串'yyyy-mm'
- php - 未捕获的类型错误:Magento\InventoryComposerInstaller 的返回值必须是 Magento\InventoryComposerInstaller\void 的实例,没有返回
- python - 如何使用 jq 工具或 python 作为输出编码器将结果转换为 json 格式是一个难题