Sql server 不给我任何信息,因为我的数据中没有状态为0的实例。我希望'transactions=0-这有意义吗?“transactions”是“COUNT(Status)”的别名。您说希望事务为0,但也说没有计数(状态)0。此列是否为您返回了正确的值?我猜您是想使用S
Sql server 不给我任何信息,因为我的数据中没有状态为0的实例。我希望'transactions=0-这有意义吗?“transactions”是“COUNT(Status)”的别名。您说希望事务为0,但也说没有计数(状态)0。此列是否为您返回了正确的值?我猜您是想使用S,sql-server,Sql Server,不给我任何信息,因为我的数据中没有状态为0的实例。我希望'transactions=0-这有意义吗?“transactions”是“COUNT(Status)”的别名。您说希望事务为0,但也说没有计数(状态)0。此列是否为您返回了正确的值?我猜您是想使用SUM(状态为NULL时为0,否则为1)“Transactions”是“COUNT(Status)”的别名-这是正确的。Yeh我希望我的alias列事务返回当月所有为0的值,因此供应商列表将仅为本月事务中有“0”的供应商。谢谢你,很抱歉,这里发生
不给我任何信息,因为我的数据中没有状态为0的实例。我希望'transactions=0-这有意义吗?“transactions”是“COUNT(Status)”的别名。您说希望事务为0,但也说没有计数(状态)0。此列是否为您返回了正确的值?我猜您是想使用
SUM(状态为NULL时为0,否则为1)
“Transactions”是“COUNT(Status)”的别名-这是正确的。Yeh我希望我的alias列事务返回当月所有为0的值,因此供应商列表将仅为本月事务中有“0”的供应商。谢谢你,很抱歉,这里发生了一些事情,我的sql不是最好的。你能解释一下吗?谢谢你,很抱歉这里发生了一些事情,我的sql不是最好的。你能解释一下吗?谢谢@Ezlo,不过这不会给我带来任何麻烦吗?@Taz确保你至少有一个组织当月的交易计数为0,否则它不会给你任何结果。我肯定会@Ezlo,但不确定为什么它没有给我任何行。@Taz尝试使用版本中的查询查询当月有0笔交易的组织。出现错误“列‘tx.Sending_organization’在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。”谢谢@Ezlo,但是,这不会给我任何行?@Taz请确保您至少有一个组织当前月的交易计数为0,否则它不会给您任何结果。我肯定会@Ezlo,但不确定为什么它没有给我任何行。@Taz尝试使用版本中的查询查询当月有0笔交易的组织。出现错误“列‘tx.Sending_organization’在选择列表中无效,因为它既不包含在聚合函数中,也不包含在GROUP BY子句中。”
SELECT distinct sending_organisation AS [Supplier], t1.date, COUNT(Status) AS [Transactions], Month(t1.Date) SO_Month, Year(t1.date) SO_Year
FROM tx
CROSS APPLY ( VALUES (CONCAT(left(DATENAME(mm, Date_Reported),3),' ',
DATENAME(yyyy, Date_Reported)),
DATEPART(mm, Date_Reported)
)
) t1 (Date, Morder)
where Date >= DATEADD(MONTH, -13, CAST(GETDATE() AS DATE))
GROUP BY t1.date, t1.Morder, sending_organisation
ORDER BY sending_organisation, date DESC;
DECLARE @sql NVARCHAR(MAX)=
'SELECT DISTINCT sending_organisation AS [Supplier],
t1.date,
Count(status) AS [Transactions],
Month(t1.date) so_month,
Year(t1.date) so_year
FROM tx
CROSS apply ( VALUES
(
Concat(LEFT(Datename(mm, date_reported),3),'' '', Datename(yyyy, date_reported)),
Datepart(mm, date_reported)
)
) t1 (date, morder)
WHERE date >= Dateadd(month, -13, Cast(Getdate() AS DATE))
placeHolder
GROUP BY t1.date,
t1.morder,
sending_organisation
ORDER BY sending_organisation,
date DESC; ';
IF(condition)
BEGIN
SET @sql = replace(@sql,'placeHolder','AND WHERE transactionValue = 0 ');
END
ELSE
BEGIN
SET @sql = replace(@sql,'placeHolder',' ');
END
EXEC(@sql);
;WITH Data AS
(
-- This is your query without modifications
SELECT distinct
sending_organisation AS [Supplier],
t1.date,
COUNT(Status) AS [Transactions],
Month(t1.Date) SO_Month,
Year(t1.date) SO_Year
FROM
tx
CROSS APPLY ( VALUES (CONCAT(left(DATENAME(mm, Date_Reported),3),' ',
DATENAME(yyyy, Date_Reported)),
DATEPART(mm, Date_Reported)
)
) t1 (Date, Morder)
where
Date >= DATEADD(MONTH, -13, CAST(GETDATE() AS DATE))
GROUP BY
t1.date,
t1.Morder,
sending_organisation
),
AvailableSuppliers AS
(
SELECT DISTINCT
Supplier = sending_organisation
FROM
tx AS D
),
CurrentMonthTransactionZero AS
(
-- Determine which sending_organisation have no transactions on the current month
SELECT
A.Supplier
FROM
AvailableSuppliers AS A
WHERE
NOT EXISTS (
SELECT
'no transaction for current month'
FROM
tx AS T
WHERE
A.Supplier = T.sending_organisation AND
Date_Reported >= DATEADD(DAY, 1, EOMONTH(GETDATE(), -1)) AND -- First day of current month
Date_Reported < DATEADD(DAY, 1, EOMONTH(GETDATE())) -- First day of next month
)
)
SELECT
D.*
FROM
CurrentMonthTransactionZero AS D
INNER JOIN CurrentMonthTransactionZero AS C ON D.Supplier = C.Supplier