Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.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
Sql server 如何从每个客户机的表中仅获取1个值,并从相同但具有不同值的表中获取所有值_Sql Server_Tsql_Sql Server 2012 - Fatal编程技术网

Sql server 如何从每个客户机的表中仅获取1个值,并从相同但具有不同值的表中获取所有值

Sql server 如何从每个客户机的表中仅获取1个值,并从相同但具有不同值的表中获取所有值,sql-server,tsql,sql-server-2012,Sql Server,Tsql,Sql Server 2012,我需要查询以生成where,如果客户端的状态为“5”,则我获取所有行,如果客户端只有“6”状态,则我仅从中获取一个最新状态 CREATE TABLE #test ( ClientID INT NULL, StatusID INT NULL, Date DATE null ) INSERT INTO #test ( ClientID, StatusID, Date ) SELECT 1001,5,'20190909' UNION all SELECT 1001,5,'20

我需要查询以生成where,如果客户端的状态为“5”,则我获取所有行,如果客户端只有“6”状态,则我仅从中获取一个最新状态

CREATE TABLE #test (
ClientID INT NULL,
StatusID INT NULL,
Date DATE null

)
INSERT INTO #test
(
    ClientID,
    StatusID,
    Date
)
SELECT 1001,5,'20190909'
UNION all
SELECT 1001,5,'20190908'
UNION  all
SELECT 1002,5,'20190909'
UNION  all
SELECT 1002,6,'20190910'
UNION  all
SELECT 1003,6,'20190909'
UNION all
SELECT 1003,6,'20190910'
如果最新的平均最大日期,则:

select top 1  *
from
 test
 where StatusID=6
union  all(

select * from 
test
 where StatusID=5)
order by Date desc

选中此复选框,您的问题表明,如果某个客户端有任何StatusID=5的行,那么您需要该客户端的所有行。如果客户端只有StatusID=6行,则只需要最新的行

下面的SQL实现了这一点

WITH T
     AS (SELECT *,
                HasStatus5 = SIGN(SUM(IIF(StatusID = 5, 1, 0)) OVER (PARTITION BY ClientID)),
                LatestDate = MAX(Date) OVER (PARTITION BY ClientID)
         FROM   #test
         WHERE  StatusID IN ( 5, 6 ))
SELECT ClientID,
       StatusID,
       Date
FROM   T
WHERE  HasStatus5 = 1
        OR Date = LatestDate 

您能提供输入和预期输出吗?您好,它将为ClientID=1002的客户端显示2行,我如何修改脚本以仅显示5行,这是我的难题