我正在尝试在下面的查询中获取状态字段,以将今天的日期作为列别名:
SELECT
State,
GroupNumber,
FacilityNumber,
CASE WHEN Pyes IS NULL THEN 0 ELSE Pyes END AS PCY,
CASE WHEN Pno IS NULL THEN 0 ELSE Pno END AS PCN,
CASE WHEN CYes IS NULL THEN 0 ELSE CYes END AS CTY,
CASE WHEN CNo IS NULL THEN 0 ELSE CNo END AS CTN,
CASE WHEN Appointed IS NULL THEN 0 ELSE Appointed END AS Appointed,
CASE WHEN Super IS NULL THEN 0 ELSE Super END AS Super,
CASE WHEN NFR IS NULL THEN 0 ELSE NFR END AS NFR,
CASE WHEN RN IS NULL THEN 0 ELSE RN END AS RN,
CASE WHEN Speech IS NULL THEN 0 ELSE Speech END AS Speech,
CASE WHEN Occupation IS NULL THEN 0 ELSE Occupation END AS Occupation,
CASE WHEN Physio IS NULL THEN 0 ELSE Physio END AS Physio,
CASE WHEN EN IS NULL THEN 0 ELSE EN END AS EN,
CASE WHEN Diet IS NULL THEN 0 ELSE Diet END AS Diet,
CASE WHEN MD IS NULL THEN 0 ELSE MD END AS MD,
CASE WHEN HW IS NULL THEN 0 ELSE HW END AS HW,
CASE WHEN Cleaner IS NULL THEN 0 ELSE Cleaner END AS Cleaner,
CASE WHEN Cook IS NULL THEN 0 ELSE Cook END AS Cook,
CASE WHEN CSW IS NULL THEN 0 ELSE CSW END AS CSW,
CASE WHEN GA IS NULL THEN 0 ELSE GA END AS GA,
CASE WHEN [Tel/Chat] IS NULL THEN 0 ELSE [Tel/Chat] END AS 'Tel/Chat',
CASE WHEN FPH IS NULL THEN 0 ELSE FPH END AS FPH
FROM DTE
ORDER BY CASE
WHEN State = 'ACT' THEN '1'
WHEN State = 'NSW' THEN '2'
WHEN State = 'NT' THEN '3'
WHEN State = 'QLD' THEN '4'
WHEN State = 'VIC' THEN '5'
WHEN State = 'SA' THEN '6'
WHEN State = 'WA' THEN '7'
WHEN State = 'TAS' THEN '8'
WHEN State = 'NULL' THEN '9'
END
我已尝试将动态SQL语句用于上述内容,但数据来自嵌套的CTE语句,并引发错误Invalid object name 'DTE'
:
DECLARE @dt NVARCHAR(50) = CAST(GETDATE() AS DATE)
DECLARE @SQL NVARCHAR(MAX) = '
SELECT
State AS ''' + @dt + ''',
CASE WHEN Pyes IS NULL THEN 0 ELSE Pyes END AS PCY,
CASE WHEN Pno IS NULL THEN 0 ELSE Pno END AS PCN,
CASE WHEN CYes IS NULL THEN 0 ELSE CYes END AS CTY,
CASE WHEN CNo IS NULL THEN 0 ELSE CNo END AS CTN,
CASE WHEN Appointed IS NULL THEN 0 ELSE Appointed END AS Appointed,
CASE WHEN Super IS NULL THEN 0 ELSE Super END AS Super,
CASE WHEN NFR IS NULL THEN 0 ELSE NFR END AS NFR,
CASE WHEN RN IS NULL THEN 0 ELSE RN END AS RN,
CASE WHEN Speech IS NULL THEN 0 ELSE Speech END AS Speech,
CASE WHEN Occupation IS NULL THEN 0 ELSE Occupation END AS Occupation,
CASE WHEN Physio IS NULL THEN 0 ELSE Physio END AS Physio,
CASE WHEN EN IS NULL THEN 0 ELSE EN END AS EN,
CASE WHEN Diet IS NULL THEN 0 ELSE Diet END AS Diet,
CASE WHEN MD IS NULL THEN 0 ELSE MD END AS MD,
CASE WHEN HW IS NULL THEN 0 ELSE HW END AS HW,
CASE WHEN Cleaner IS NULL THEN 0 ELSE Cleaner END AS Cleaner,
CASE WHEN Cook IS NULL THEN 0 ELSE Cook END AS Cook,
CASE WHEN CSW IS NULL THEN 0 ELSE CSW END AS CSW,
CASE WHEN GA IS NULL THEN 0 ELSE GA END AS GA,
CASE WHEN [Tel/Chat] IS NULL THEN 0 ELSE [Tel/Chat] END AS ''Tel/Chat'',
CASE WHEN FPH IS NULL THEN 0 ELSE FPH END AS FPH
FROM DTE
ORDER BY CASE
WHEN State = ''ACT'' THEN ''1''
WHEN State = ''NSW'' THEN ''2''
WHEN State = ''NT'' THEN ''3''
WHEN State = ''QLD'' THEN ''4''
WHEN State = ''SA'' THEN ''5''
WHEN State = ''WA'' THEN ''6''
WHEN State = ''TAS'' THEN ''7''
WHEN State = ''NULL'' THEN ''8''
END'
由于查询超过4000个字符,我也无法将整个查询放入动态SQL查询中。
ISNULL()
而不是这些多个CASE
表达式来大大缩短查询时间。例如,这: