簡體   English   中英

如何使用SQL從兩個表進行INNER JOIN條件數據

[英]How to INNER JOIN conditional data from two tables with SQL

我有兩個桌子。

一個包含ENTITYID列和代表作業是否為全職(1為全職)的列。

另一個表包含匹配的ID和一列,說明這些作業所基於的國家/地區。

我的任務是在表1中找到所有全職工作,然后使用該信息從表2中找到他們所在的國家/地區。 但第二部分需要計算每個國家的工作數量。 即。 10個日本,5個美國,2個英國。 不是日本,日本,日本等。

到目前為止,我有:

SELECT entityid FROM dbo.Jobs WHERE contracthours = 1;

這將返回所有全職(= 1)的作業id(entityid)。 但是,現在我該如何獲取這些數據並使用它在第二張表中找到它們。

在表2中:

SELECT COUNT(ID), ISNULL(country, 'No Country')
FROM dbo.JobLocations
GROUP BY Country;

這將返回包含所有工作的工作,並且還將沒有相關國家的工作替換為“無國家”(這是我的任務要求的一部分)。

我需要做的是從table1的第一個查詢中獲取我所擁有的內容,並以某種方式INNER JOIN並返回與table2上使用的第二個查詢類似的結果。

編輯:我應該注意來自table1的ENTITYID等於table2中的JOBID

一些視覺效果,第一個圖像顯示table1 ID和Contracthours(1是全職),第二個圖像顯示table2 ID和相關國家。

表格1

表2

SELECT COUNT(ID), ISNULL(country, 'No Country')
FROM dbo.JobLocations
where JOBID in (SELECT entityid FROM dbo.Jobs WHERE contracthours = 1)
GROUP BY Country;

如果我理解正確,您可以嘗試將count與窗口函數一起使用get count然后在ENTITYIDJOBIDjoin

SELECT * 
FROM dbo.Jobs t1 inner join (
    SELECT JOBID,
            COUNT(ID) over(partition by Country order by Country) cnt, 
            ISNULL(country, 'No Country') country
    FROM dbo.JobLocations
) t2 on t2.JOBID = t1.entityid
WHERE t1.contracthours = 1;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM