将来自两个选择查询的数据添加到一个表中,这些查询针对来自两个不同表的不同列数

Posted

技术标签:

【中文标题】将来自两个选择查询的数据添加到一个表中,这些查询针对来自两个不同表的不同列数【英文标题】:Adding data into one table from two select queries targeting different number of columns from two different tables 【发布时间】:2017-12-12 10:16:26 【问题描述】:

我有两个选择查询,每个查询中的列数不同,条件不同。我想将从两个选择查询收集的数据添加到一个表中。我已经看到了执行“UNION”的方法,但在这种情况下,两个查询中的列数必须相同,如何将两个查询中的数据添加到单个表中。我的查询如下:

Select 
Village_ID,
Village_Name,
RSP_ID,
Other_Loan_Source,
Informal_Money_Lender_Loans
from(
Select DISTINCT SETTLEMENT_ID as Village_ID,
SETTLEMENT_NAME as Village_Name,
RSP_ID,
(SELECT COUNT(*) FROM PscData where SETTLEMENT_ID  = T.SETTLEMENT_ID 
AND TAKEN_LOAN = 6 )as Other_Loan_Source,
(SELECT COUNT(*) FROM PscData where SETTLEMENT_ID  = T.SETTLEMENT_ID 
AND TAKEN_LOAN = 5 )as Informal_Money_Lender_Loans

FROM PscData as T

)tmp

第二个查询是这样的:

SELECT
        SUM(CASE WHEN  t2.SEX = 1
        THEN 1 ELSE 0 END) AS Total_Males,

        SUM(CASE WHEN  t2.SEX = 2
        THEN 1 ELSE 0 END) AS Total_Females,

        SUM(CASE WHEN   t2.MARITAL_STATUS = 1
        THEN 1 ELSE 0 END) AS Total_Married,
        t1.SETTLEMENT_ID 
FROM PScData t1 
INNER JOIN PscMemberData t2
    ON t2._PARENT_AURI = t1.URI
GROUP BY
    t1.SETTLEMENT_ID
HAVING COUNT(*) > 1;

如何将这些结果合并到一张表中。

【问题讨论】:

你的表结构是什么? 我不明白您为什么要使用联合,因为您的列完全不同。为什么不加入 SETTLEMENT_ID = Village_ID 上的两个结果。这样,您将获得一个包含您需要的所有信息的表格。 【参考方案1】:

您可以首先使用联合创建一个表,并且只创建两个表中都存在的字段。然后将此表连接到原始表以添加剩余字段。

with cte as (
select Village_ID as village_settlement_id
  from #tmp_1
 union 
select SETTLEMENT_ID as village_settlement_id
  from #tmp_2
)
select * 
     , #tmp_1.Village_ID
     , #tmp_1.Village_Name
     , #tmp_1.RSP_ID
     , #tmp_1.Other_Loan_Source
     , #tmp_1.Informal_Money_Lender_Loans
     , #tmp_2.Total_Males
     , #tmp_2.Total_Females
     , #tmp_2.Total_Married
  from cte 
  left join #tmp_1 on cte.village_settlement_id = #tmp_1.Village_ID  
  left join #tmp_2 on cte.village_settlement_id = #tmp_1.SETTLEMENT_ID

【讨论】:

我已经创建了一个表,但我不能使用联合,因为我在两个查询中的列数不同 你创建的表是否和上面的code-sn-p一样?我后来添加的,所以你可能错过了那部分。 不,我不是通过查询手动创建表的。我先创建了表,然后写了这个查询。 我的两个表都不同,只有 ID 列匹配,没有其他字段相似【参考方案2】:

为什么不直接在第二个表中添加一个虚拟列?

SELECT
        SUM(CASE WHEN  t2.SEX = 1
        THEN 1 ELSE 0 END) AS Total_Males,

        SUM(CASE WHEN  t2.SEX = 2
        THEN 1 ELSE 0 END) AS Total_Females,

        SUM(CASE WHEN   t2.MARITAL_STATUS = 1
        THEN 1 ELSE 0 END) AS Total_Married,
        t1.SETTLEMENT_ID ,
        '' Informal_Money_Lender_Loans
FROM PScData t1 

【讨论】:

这是什么?你能解释一下

以上是关于将来自两个选择查询的数据添加到一个表中,这些查询针对来自两个不同表的不同列数的主要内容,如果未能解决你的问题,请参考以下文章

将来自多个表的查询数据放入 html 表中

在一个查询Access数据库中从具有不同字段的两个不同表中选择列

MS Access 中的条件选择语句

如何将 Btree 或哈希索引添加到 mysql 中的表中? [关闭]

SQL 2012 将来自多个表的多个查询与连接和计数合并到一个表中

来自选择查询的一个单元格中的多个值