我有一个包含OrderId (int), ordernum varchar(50), pickup varchar(50) , dropoff varchar(50),DADDR varchar(50) ,DRV1NUM varchar(10),READYDATE datetime
列的表ORDE_,我正在尝试获取以下条件的值where there the first 5 characters of ORDE_.DADDR are the same and there is more than one ORDE_.DRV1NUM for the orders with the same 5 first characters of ORDE_.DADDR
我尝试以下查询,但没有给我正确的值
SELECT ordernum, pickup, dropoff,DADDR,DRV1NUM,READYDATE FROM orde_
WHERE substring(DADDR,1,5) IN (
SELECT substring(DADDR,1,5)
FROM orde_
GROUP BY substring(DADDR,1,5)
HAVING COUNT(*) > 1)
AND READYDATE ='01/18/2016'
AND DISPID=56
AND DADDR <> ''
ORDER BY DADDR DESC
你可以帮我解决这个问题吗?谢谢你的时间
你可以这样理解
DADDR DRV1NUM
------ -------
ABCD 1214
ABCD 1214
ABCD 1215
AACD 1216
AACD 1216
AACD 1218
AAAA 12121
AAAA 12121
AAAA 12121
OUTPUT将
DADDR DRV1NUM
------ -------
ABCD 1215
AACD 1218
因为相同的DADDR With有超过1个DRV1NUM
答案 0 :(得分:1)
这将为您提供所有行,其中DADDR的前5个字符与DRV1NUM的前5个字符至少有一个匹配。
;WITH CTE as
(
SELECT
ordernum, pickup, dropoff,DADDR,DRV1NUM,READYDATE,
count(*) over (partition by LEFT(DADDR,5), LEFT(DRV1NUM,5)) cnt1,
count(*) over (partition by LEFT(DADDR,5)) cnt2
FROM orde_
WHERE
READYDATE ='2016-01-18'
AND DISPID=56
AND DADDR <> ''
)
SELECT
ordernum, pickup, dropoff,DADDR,DRV1NUM,READYDATE
FROM CTE
WHERE
cnt1 = 1
AND cnt2 > 1