Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
依靠tsql中Case语句的结果_Sql_Sql Server_Tsql - Fatal编程技术网

依靠tsql中Case语句的结果

依靠tsql中Case语句的结果,sql,sql-server,tsql,Sql,Sql Server,Tsql,嗨,当我交换上面和下面的case语句行时,我得到了一个不同的值。这不好。有人能帮我吗 SELECT CASE WHEN dDate > '20130509' ANd dDate < '20130909' THEN 1 WHEN dDate > '20130609' ANd dDate < '20131109' THEN 2 WHEN dDate > '20130709' ANd dDate < '20131009' TH

嗨,当我交换上面和下面的case语句行时,我得到了一个不同的值。这不好。有人能帮我吗

SELECT
    CASE 
     WHEN dDate > '20130509' ANd dDate < '20130909' THEN 1
     WHEN dDate > '20130609' ANd dDate < '20131109' THEN 2
     WHEN dDate > '20130709' ANd dDate < '20131009' THEN 3 as DateVal,
CASE 
     WHEN dDate > '20130509' ANd dDate < '20130909' THEN COUNT(Encounter)
     WHEN dDate > '20130609' ANd dDate < '20131109' THEN COUNT(Encounter)
     WHEN dDate > '20130709' ANd dDate < '20131009' THEN COUNT(Encounter)) as Value
FROM Table 1
当用户稍微更改上面的查询时

SELECT
        CASE 
         WHEN dDate > '20130609' ANd dDate < '20131109' THEN 2
         **WHEN dDate > '20130509' ANd dDate < '20130909' THEN 1**
         WHEN dDate > '20130709' ANd dDate < '20131009' THEN 3 as DateVal,
    CASE 
         WHEN dDate > '20130609' ANd dDate < '20131109' THEN COUNT(Encounter)
         **WHEN dDate > '20130509' ANd dDate < '20130909' THEN COUNT(Encounter)**
         WHEN dDate > '20130709' ANd dDate < '20131009' THEN COUNT(Encounter)) as Value
    FROM Table 1

这对我来说很奇怪。有人能帮忙吗。

那是因为当子句重叠时,您在
中指定的日期间隔。当
CASE
语句找到匹配的
When
子句时,它从该子句中获取结果并跳过其他子句


您的某些记录可以在多个
WHEN
子句中匹配。当您对子句重新排序时,您会更改行与另一个
When
子句匹配的机会。

这是因为您在
When
子句中指定的日期间隔重叠。当
CASE
语句找到匹配的
When
子句时,它从该子句中获取结果并跳过其他子句


您的某些记录可以在多个
WHEN
子句中匹配。重新排序子句时,当
子句时,更改行与另一个子句匹配的机会。

这是因为日期范围重叠,而
CASE
通常会选择第一个符合标准的正确表达式。您的日期格式是YYYYMDD还是yyyyddmm?这是因为您的日期范围重叠,而
CASE
通常会选择第一个符合标准的正确表达式。您的日期格式是yyyymmdd还是yyyyddmm?
SELECT
        CASE 
         WHEN dDate > '20130609' ANd dDate < '20131109' THEN 2
         **WHEN dDate > '20130509' ANd dDate < '20130909' THEN 1**
         WHEN dDate > '20130709' ANd dDate < '20131009' THEN 3 as DateVal,
    CASE 
         WHEN dDate > '20130609' ANd dDate < '20131109' THEN COUNT(Encounter)
         **WHEN dDate > '20130509' ANd dDate < '20130909' THEN COUNT(Encounter)**
         WHEN dDate > '20130709' ANd dDate < '20131009' THEN COUNT(Encounter)) as Value
    FROM Table 1
 EncounterCount     Date
 45                 1
 150                2
 20                 3