2017-06-23 84 views
2

我需要找到基於一個表(「client_table」)任何給定日期的有效客戶的數量填充有效客戶的數量普查列每個日期三列:'client_id','admit_date'和'discharge_date'。SQL:如何基於承認日期和出院日期

要做到這一點,我創建了一個第二個表(「census_table」)與兩列:「日期」和「人口普查」。我需要填寫「人口普查」列,其中包含「日期」列中每個日期的活動客戶數量(我已使用2000年1月1日至2015年12月31日期間的每個日期填充

的邏輯應該是,如果「admit_date」 < =「日期」和「discharge_date」> =「日期」,然後在客戶端應在普查該日起計算,但我不知道如何編寫此在SQL

SELECT COUNT(client_id) AS census 
FROM client_table 
WHERE admit_date <= census_table.date 
AND discharge_date >= census_table.date 

這將返回錯誤: 「消息4104,級別16,狀態1,第3行 多部分標識符 「census_table.date」 無法綁定 消息4104,級別16,狀態1,行4。多部分標識符「census_table.date」無法綁定」

+2

顯示您到目前爲止所嘗試的內容。這不是一個免費的寫作網站。 –

+0

我的歉意。我會更新這篇文章。 –

+0

我相信日期是SQL中的關鍵字。嘗試將其包裝如下:'census_table。[date]'你也試圖引用'census_table',而不用以某種方式加入到它或subquerying中。 –

回答

0

這是SQL查詢,讓我我所需要的值(和可以再平均值的時間在電力BI定義時間段)。

SELECT [date], COUNT(DISTINCT 
(CASE WHEN admit_date <= [date] AND discharge_date >= [date] THEN client_id END)) 
AS census 

FROM client_table, census_table 

GROUP BY [date] 
ORDER BY [date] 

許多感謝您的幫助指導我在正確的方向。

1

試試這個方法:

SELECT COUNT(client_id) AS census,(select date from census_table) as mydate 
FROM client_table 
WHERE admit_date <= mydate 
AND discharge_date >= mydate 
0

SQL Server的告訴你問題大致就是:census_table.date是多部分不能綁定任何東西的標識符。這是因爲標識符census_table的第一部分並不意味着您使用它的任何內容,因爲它沒有在查詢的FROM部分中列爲表。

目前尚不清楚你是如何計劃管理計算每個日期的答案。也許你想逐個瀏覽日期,並使用該SQL來計算每個日期的人口普查數據?在這種情況下,您可以用查詢參數替換census_table.date。這將是這個樣子:

SELECT COUNT(client_id) AS census 
FROM client_table 
WHERE admit_date <= @query_date 
AND discharge_date >= @query_date 

這就是你指定的查詢參數將取決於您使用執行SQL什麼樣的環境價值。

更有可能的是你想要寫一些SQL做整體計算一氣呵成。如果是這樣,您需要更改您的彙總計算,以便通過census_table.date進行彙總,而不是給出單個總計。看看https://www.w3schools.com/sql/sql_groupby.asp

採取這種方法,你可以簡單地添加census_table到從語句的一部分。看看https://www.w3schools.com/sql/sql_join_inner.asp