我需要根据一个表格(' client_table')找到任意日期的活跃客户端数量,其中有三列:' client_id',' admit_date&#39 ;和' discharge_date'。
为此,我创建了第二个表格(' census_table'),其中包含两列:' date'和'人口普查'我需要填写人口普查'列中包含'日期'中每个日期的活动客户数量的列。专栏(我已经填写了2000年1月1日至12月31日期间的每个日期。
逻辑应该是IF' admit_date' < ='日期'和' discharge_date' > =' date',然后客户应计入该日期的人口普查,但我不知道如何在SQL中对此进行编码。
SELECT COUNT(client_id) AS census
FROM client_table
WHERE admit_date <= census_table.date
AND discharge_date >= census_table.date
这会返回错误: &#34; Ms 4104,Level 16,State 1,Line 3 多部分标识符&#34; census_table.date&#34;无法受约束。 Msg 4104,Level 16,State 1,Line 4 多部分标识符&#34; census_table.date&#34;无法受约束。&#34;
答案 0 :(得分: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
答案 1 :(得分: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添加到语句的FROM部分即可。看看https://www.w3schools.com/sql/sql_join_inner.asp
答案 2 :(得分:0)
这是SQL查询,它为我提供了我需要的值(然后可以在Power 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]
非常感谢帮助我指导正确的方向。