今天的日期为列名

问题描述 投票:0回答:1

我正在尝试在下面的查询中获取状态字段,以将今天的日期作为列别名:

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查询中。

sql-server string tsql select dynamic-sql
1个回答
2
投票
您可以通过使用ISNULL()而不是这些多个CASE表达式来大大缩短查询时间。例如,这:
© www.soinside.com 2019 - 2024. All rights reserved.