매개 변수를 쿼리에 전달하고 결과를 조인하려면 테이블 반환 함수를 사용해야합니다. 귀하가 가입 할 때, 귀하는 내부 결합 또는 좌측 결합 대신에 CROSS APPLY 또는 OUTER APPLY를 사용합니다.
은 또한, 나는이 말을하지 않고가는 생각하지만, 여기서 purchaseDate이 비어있는 경우 확인할 때
WHERE s.PurchaseDate <> ''
이 문제가 될 수 ... 그것은 (예?) 대신 날짜 시간의 VARCHAR 필드의 의미 Null 값을 처리하지 않습니다. 적어도 ISNULL (s.PurchaseDate, '') <> ''으로 바꿀 수 있습니다. 실제로 datetime 일 경우 <> ''대신 IS NOT NULL을 사용하십시오.
은 (답변자를 지원하기 위해 샘플 데이터와. 내가 SQL의 게시물이 추가 권장 DDL 문을 추가 수정 됨. 또한, 나는 때문에 쿼리에서 문자열 비교 대신 날짜의 서 purchaseDate이 포함 된 VARCHAR을했다.)
당신이 가까이있어 https://technet.microsoft.com/en-us/library/ms191165(v=sql.105).aspx
CREATE TABLE company (company_name VARCHAR(25))
INSERT INTO company VALUES ('Company1'), ('Company2')
CREATE TABLE vw_repeat (customername VARCHAR(25), purchasedate VARCHAR(25), company VARCHAR(25))
INSERT INTO vw_repeat VALUES ('Cust1', '11/16/2017', 'Company1')
INSERT INTO vw_repeat VALUES ('Cust1', '11/16/2017', 'Company1')
INSERT INTO vw_repeat VALUES ('Cust2', '11/16/2017', 'Company2')
CREATE FUNCTION [dbo].tf_customers
(
@company varchar(25)
)
RETURNS TABLE AS RETURN
(
SELECT s.[CustomerName], cast(s.PurchaseDate as date) PurchaseDate
FROM vw_Repeat s
WHERE s.PurchaseDate <> '' AND s.Company = @company
GROUP BY s.[CustomerName] , cast(s.PurchaseDate as date)
HAVING COUNT(*) > 1
)
GO
SELECT *
FROM company c
CROSS APPLY tf_customers(c.company_name)
다른 쿼리는 어디에 있습니까? – Sami
죄송합니다. 질의를 작성하지 않았습니다. 나는 내가하려고하는 것을 완료하기 위해 다른 쿼리와 함께 첫 번째 쿼리를 포함해야한다고 생각했다. 나는 아직이 새로운이며 두 번째 쿼리를 취할 수있는 최상의 경로를 몰랐다. –
distinct를 제거하면 해당 쿼리에서 아무런 도움이되지 않습니다. –