Sql server SQL Server:查询报表

Sql server SQL Server:查询报表,sql-server,tsql,Sql Server,Tsql,我需要为每周、每月、每年的付款以及哪种服务的销售额更大创建查询 以下是我为1至30天付款编写的SQL代码: SELECT payments_date, payments_amount, DATEDIFF(DAY, [payments_date], GETDATE()) AS Diff FROM dbo.payments WHERE DATEDIFF(DAY, payments_date, GETDATE()) BETWEEN 1 AND 30 ORDER B

我需要为每周、每月、每年的付款以及哪种服务的销售额更大创建查询

以下是我为1至30天付款编写的SQL代码:

SELECT 
    payments_date, payments_amount, 
    DATEDIFF(DAY, [payments_date], GETDATE()) AS Diff 
FROM
    dbo.payments
WHERE
    DATEDIFF(DAY, payments_date, GETDATE()) BETWEEN 1 AND 30
ORDER BY
    payments_amount DESC
dbo.treatments
是不同的表
dbo.payments
是不同的表

dbo.treatments
列为
treatments\u name
dbo.payments
列为
payments\u amount
。所以我需要知道哪种疗法的销量更大

我不认为你需要更多的细节

dbo.治疗

treatments_id  
taxes_id  
treatmentstype_id  
treatments_code  
treatments_name  
treatments_price  
treatments_isunitprice  
treatments_mexpiration  
treatments_notes   
payments_id  
patiens_id  
payments_date  
payments_amount  
payments_notes  
dbo.payments

treatments_id  
taxes_id  
treatmentstype_id  
treatments_code  
treatments_name  
treatments_price  
treatments_isunitprice  
treatments_mexpiration  
treatments_notes   
payments_id  
patiens_id  
payments_date  
payments_amount  
payments_notes  
选择
,最大(付款额)
从…起
dbo.payments
其中datediff(day,payments\u date,getdate())介于1和30之间 分组

对于问题的第二部分,假设已付款和未付款为标志:

select 
    <service_column_name>, COUNT(payed), COUNT(not_payed)
from 
    dbo.payments 
选择
,计数(已付款),计数(未付款)
从…起
dbo.payments
其中选择
,最大(付款额) 从…起 dbo.payments 其中datediff(day,payments\u date,getdate())介于1和30之间 分组

我们需要样本数据和预期结果您需要解释什么是服务以及如何通过样本数据或表描述来查看某人是否已付款。我想您在查询中使用了payments\u date列,所以这里也有payments\u date列。你如何连接付款和治疗表,付款表中是否有对治疗表的引用?不,它没有任何引用,这就是为什么我问“有两个不同的表必须给我带来价值,我不知道如何请列出
付款
表中的所有列以及
治疗
表中的所有列我在执行时使用了您的代码我收到此消息8121,级别16,状态1,第10行列“dbo.payments.payments_date”在HAVING子句中无效,因为它既不包含在聚合函数中,也不包含在GROUP BY子句中。Msg 8121,第16级,状态1,第10行列“dbo.payments.payments\u date”在HAVING子句中无效,因为它既不包含在聚合函数中,也不包含在GROUP BY子句中,付款金额在另一个表dbo中。payments@Charlie你为什么拒绝用要求的信息来改进你的问题,除非您这样做,否则您将不会得到任何限定答案。我已经写下了表名和列,我想知道它们之间的差异
HAVING
应仅用于聚合列-当您想对具有
SUM
MAX
AVG
等的列设置条件时,你真的应该用
WHERE