I have a query that I am trying to retrieve only 1 result (phone number field, can have multiple phone numbers stored) that has a value, however my results are duplicating the results for every phone number associated to a vendor. Here is an example of the result set:
As you can see from the above image, the results by NAME1 are being duplicated because the PHONE field has 3 distinct values. I only want to pull 1 phone number (doesnt matter which one, long as there are no nulls). Here is an example of my sql code, you can see the commented out sections where I tried to capture the MAX value in a derived query for C.PHONE.
SELECT DISTINCT A.NAME1, SUM( A.REMIT_AMT), A.REMIT_VENDOR, (C.PHONE),
C.PHONE_TYPE
FROM PS_PAYMENT_TBL A, PS_VENDOR B, PS_VENDOR_ADDR_PHN C
WHERE A.PYMNT_DT >= '01-01-2017'
AND A.PYMNT_DT <= '12-31-2017'
AND A.REMIT_SETID = 'SHARE'
AND B.SETID = A.REMIT_SETID
AND B.VENDOR_ID = A.REMIT_VENDOR
AND B.VENDOR_CLASS <> 'E'
AND B.SETID = C.SETID
AND B.VENDOR_ID = C.VENDOR_ID
--AND C.PHONE =
--(SELECT MAX(C2.PHONE) FROM PS_VENDOR_ADDR_PHN C2)
AND C.EFFDT =
(SELECT MAX(C_ED.EFFDT) FROM PS_VENDOR_ADDR_PHN C_ED
WHERE C.SETID = C_ED.SETID
AND C.VENDOR_ID = C_ED.VENDOR_ID
AND C.ADDRESS_SEQ_NUM = C_ED.ADDRESS_SEQ_NUM
AND C_ED.EFFDT <= SUBSTRING(CONVERT(CHAR,GETDATE(),121), 1, 10))
GROUP BY A.NAME1, A.REMIT_VENDOR, C.PHONE, C.PHONE_TYPE
ORDER BY 2 DESC
I don't believe MS SQL Server support the LIMIT function as MySQL does, is there something similar I can use that works with MS SQL Server? Thanks!!
1/24 UPDATE:
SELECT DISTINCT A.NAME1, SUM( A.REMIT_AMT) As TOTAL_SPEND, A.REMIT_VENDOR,
C.FIRST_PHONE, C.FIRST_PHONE_TYPE
FROM
PS_PAYMENT_TBL A
LEFT JOIN (
SELECT DISTINCT VENDOR_ID,
FIRST_VALUE(PHONE) OVER (
PARTITION BY VENDOR_ID
ORDER BY PHONE DESC
ROWS UNBOUNDED PRECEDING
) AS FIRST_PHONE,
FIRST_VALUE(PHONE_TYPE) OVER (
PARTITION BY VENDOR_ID
ORDER BY PHONE DESC
ROWS UNBOUNDED PRECEDING
) AS FIRST_PHONE_TYPE
FROM PS_VENDOR_ADDR_PHN C
WHERE PHONE IS NOT NULL
) C ON A.REMIT_VENDOR = C.VENDOR_ID
, PS_VENDOR B , PS_VENDOR_ADDR_PHN CED
WHERE A.PYMNT_DT >= '01-01-2017'
AND A.PYMNT_DT <= '12-31-2017'
AND A.REMIT_SETID = 'SHARE'
AND B.SETID = A.REMIT_SETID
AND B.VENDOR_ID = A.REMIT_VENDOR
AND B.VENDOR_CLASS <> 'E'
AND B.SETID = CED.SETID
AND B.VENDOR_ID = C.VENDOR_ID
AND CED.EFFDT =
(SELECT MAX(CED.EFFDT) FROM PS_VENDOR_ADDR_PHN CED
WHERE CED.SETID = CED.SETID
AND CED.VENDOR_ID = CED.VENDOR_ID
AND CED.ADDRESS_SEQ_NUM = CED.ADDRESS_SEQ_NUM
AND CED.EFFDT <= SUBSTRING(CONVERT(CHAR,GETDATE(),121), 1, 10))
GROUP BY A.NAME1, A.REMIT_VENDOR, C.FIRST_PHONE, C.FIRST_PHONE_TYPE
ORDER BY 2 DESC