Sql server SELECT CASE语句未执行的空结果
以下是我的疑问:Sql server SELECT CASE语句未执行的空结果,sql-server,case,aggregate-functions,Sql Server,Case,Aggregate Functions,以下是我的疑问: DECLARE @ThisYear INT = CAST(DATEPART(yy, GETDATE()) AS INT) ,@LastYear INT = CAST(DATEPART(yy, GETDATE()) - 1 AS INT) SELECT CASE WHEN CAST(DATEPART(yy, mq.[qDate]) AS INT) = @ThisYear THEN 5 WHEN CAST(DATEPART(y
DECLARE
@ThisYear INT = CAST(DATEPART(yy, GETDATE()) AS INT)
,@LastYear INT = CAST(DATEPART(yy, GETDATE()) - 1 AS INT)
SELECT
CASE WHEN CAST(DATEPART(yy, mq.[qDate]) AS INT) = @ThisYear THEN 5
WHEN CAST(DATEPART(yy, mq.[qDate]) - 1 AS INT) = @LastYear THEN 6 END AS 'TimePeriodID'
,Name = 'QueryTotals'
,SUM(CASE WHEN dQuery = 1 THEN 1 ELSE 0 END) AS 'DefaultQuery'
,SUM(CASE WHEN dQuery = 0 THEN 1 ELSE 0 END) AS 'Non-DefaultQuery'
,COUNT(dQuery) AS 'TotalQueries'
FROM
mQuery mq
INNER JOIN
mParameter mp
ON
mq.id = mp.id
INNER JOIN
Variable v
ON
mp.id = v.id
WHERE
v.id <= 10
GROUP BY
CASE WHEN CAST(DATEPART(yy, mq.[qDate]) AS INT) = @ThisYear THEN 5
WHEN CAST(DATEPART(yy, mq.[qDate]) - 1 AS INT) = @LastYear THEN 6 END
声明
@ThisYear INT=CAST(日期部分(yy,GETDATE())为INT)
,@LastYear INT=CAST(DATEPART(yy,GETDATE())-1作为INT)
挑选
CASE-WHEN-CAST(DATEPART(yy,mq.[qDate])作为INT)=@thisnear 5
当强制转换时(DATEPART(yy,mq.[qDate])-1为INT)=@LastYear,然后6以'TimePeriodID'结束
,Name='QueryTotals'
,求和(当dQuery=1时为1,否则为0结束)为“DefaultQuery”
,求和(dQuery=0时为1,否则为0结束)为“非默认查询”
,将(dQuery)计数为“TotalQueries”
从…起
mQuery mq
内连接
M参数mp
在…上
mq.id=mp.id
内连接
变量v
在…上
mp.id=v.id
哪里
v、 id这种说法的组合:
DECLARE
@ThisYear INT = CAST(DATEPART(yy, GETDATE()) AS INT)
,@LastYear INT = CAST(DATEPART(yy, GETDATE()) - 1 AS INT)
SELECT
CASE WHEN CAST(DATEPART(yy, mq.[qDate]) AS INT) = @ThisYear THEN 5
WHEN CAST(DATEPART(yy, mq.[qDate]) - 1 AS INT) = @LastYear THEN 6 END AS 'TimePeriodID'
使得第二个案例不可能是真的。如果第一个演员@今年,第二组演员(第一组-1)不可能是去年,因为去年是今年-1
这就是原因。解决方案不清楚,因为您没有显示您正在尝试做什么。谢谢您,先生!这让我快发疯了。更改为:CASE YEAR(mq.[qDate]),当@ThisYear时,当@LastYear时,则当@LastYear时,则当@TimePeriodID结束时,则当@6结束时,则为'TimePeriodID'
,并且有效。我知道这是一些基本的东西。