안녕을 포함하는이 나는 과정과 같이 있습니다TSQL 집계 함수 식에 집계 오류
CREATE PROCEDURE dbo.DWS_PROG (
@fromDate datetime = '2012-01-01',
@maxMoney money = 200,
@limit int = 200
)
AS
SET NOCOUNT ON;
SELECT TOP (@limit)
convert(int,P.P_ID) AS 'ID'
, max(convert(MONEY,isnull(P.NGp,P.NGz))) AS 'NG'
, max(convert(MONEY,(CASE WHEN D.Doc_Type = 0x0000000000000016
THEN Cash_PLN
ELSE 0 END))) AS 'Interests'
, (SELECT TOP 1 convert(VARCHAR, H.Data_zmiany,105)
FROM dbo.Pozew_Historia_Stanow H
WHERE H.P_ID = P.P_ID
AND H.Stan_nastepny_id = 0x000000000000000D /*PZ*/) AS 'Data Pozwu'
, max((CASE WHEN Sad_Id=0x0000000000000E08
THEN 'EL'
ELSE 'PA' END)) AS 'TYPE'
, max((CASE WHEN Cost_Name =0x0000000000000008
THEN convert(varchar, Pay_Date,105)
ELSE NULL END)) AS 'Data pierwszego kosztu wpisu sądowego'
, (SELECT TOP 1 convert(VARCHAR, H.Data_zmiany,105)
FROM dbo.Pozew_Historia_Stanow H
WHERE H.P_ID = P.P_ID
AND H.Stan_nastepny_id = 0x00000000000000DD /*EGZ-1*/) AS 'Data wszczęcia egzekucji'
, sum((CASE WHEN D.Doc_Type = 0x0000000000000003
AND D.Pay_Date >= @fromDate
AND D.Pay_Date < DATEADD(mm,DATEDIFF(mm,0,@fromDate) + 1,0)
THEN Cash_PLN
ELSE 0 END)) AS 'M0'
FROM dbo.Pozew P
JOIN dbo.Orders Z
ON Z.Orders_Id = P.Orders_Id
JOIN dbo.Docs D
ON D.P_ID = P.P_ID
WHERE ((P.NGp IS NOT NULL AND P.NGp < @maxMoney) OR (P.NGp IS NULL AND P.NGz < @maxMoney))
AND P.Stan IN ('PZ-PORAŻKA','PZ-PORAŻ-UB','PZ-PSPPOR-SP','PZ-PSPPOR-UP','PZ-PSSSUK-UP','PZ-ZAPŁATA','EGZ-C-ROSZ-1','EGZ-C-ROSZ-2','EGZ-SUKCES-S','EGZ-ZAS-R','EGZ-NZAS-R','EGZ-BS-1C','EGZ-WSZP-1','EGZ-WSZP-2','EGZ-SPL')
AND (SELECT TOP 1 dbo.Docs.Pay_Date
FROM dbo.Docs
WHERE dbo.Docs.P_ID = P.P_ID
AND dbo.Docs.Cost_Name = 0x0000000000000008
ORDER BY dbo.Docs.Pay_Date) >= @fromDate
GROUP BY P.P_ID
이 basicly가 잘 작동하지만 나는 하나의 오류가 있습니다. JOIN의 마지막 줄에 형식 0x00 ... 03을 가진 모든 Documents에 대한 현금을 합산하고 Pay_date는 param의 @param과 end of month 사이에 있습니다. 간단하고
: 작동하지만 하위 쿼리와 @fromDate를 교체해야합니다
SELECT TOP 1 dbo.Docs.Pay_Date
FROM dbo.Docs
WHERE dbo.Docs.P_ID = P.P_ID
AND dbo.Docs.Cost_Name = 0x0000000000000008
AND dbo.Docs.Pay_Date >= @fromDate
ORDER BY dbo.Docs.Pay_Date
은 그래서 모든 문서의 쿼리에 대한 지불의 특정 유형과의 첫 데이트를 취할 것입니다 후부터 시작하는 모든 지불을 요약한다 이 날짜는 월말로 끝납니다.
SUM((CASE WHEN D.Doc_Type = 0x0000000000000003
AND D.Pay_Date >=
(SELECT TOP 1 dbo.Docs.Pay_Date
FROM dbo.Docs
WHERE dbo.Docs.P_ID = P.P_ID
AND dbo.Docs.Cost_Name = 0x0000000000000008
AND dbo.Docs.Pay_Date >= @fromDate
ORDER BY dbo.Docs.Pay_Date)
AND D.Pay_Date < DATEADD(mm, DATEDIFF(mm, 0,
(SELECT TOP 1 dbo.Docs.Pay_Date
FROM dbo.Docs
WHERE dbo.Docs.P_ID = P.P_ID
AND dbo.Docs.Cost_Name = 0x0000000000000008
AND dbo.Docs.Pay_Date >= @fromDate
ORDER BY dbo.Docs.Pay_Date)) + 1,0)
THEN Cash_PLN
ELSE 0 END)) AS 'M0'
을하지만 Management Studio에서 오류가 발생하는 것이 일 후 :
SUM은 다음과 같아야합니다 나는 거의 2 일 동안 그것을 해결하기 위해 노력하고있어
Cannot perform an aggregate function on an expression containing an aggregate or a subquery.
합니다. 아이디어가 있으십니까?
죄송 테이블의 구조를 나타낸하지만 데이터베이스가 너무 커서 내가 아니라 오류 :
내 테이블이 너무과 같이 해결하는 방법이 필요하지 않는 : 등 ID, 이름,
: 표 Pozew을표 문서 :
문서 : DOCID, p_id (Pozew 테이블에서 키), DOC_TYPE, cost_name, pay_date, cash_PLN
그리고 샘플 기록은 지금처럼
1,1'15,8 '2011-02-04', 400
1,1,3,5 '2011-02-09', 0
1,1,3,5 '
간단한 시나리오 0 -02-12 ', 0
1,1, 3,5,'2011-02-04 ': 우리는 우리가 cost_name와 번째 문서가 말하는 테이블을 문서 도구에 레코드를 추가 = 0x8이면 다른 문서가 추가되지만 Doc_Type = 0x3으로 추가됩니다.
doc_Type = 0x3이고 cost_name = 0x8 인 첫 번째 문서 작성일과 월말 사이에 추가 된 모든 문서를 가져 오려고합니다. 하지만 Pozew_id마다 그룹화해야합니다. 내 부어 영어에 대한 죄송합니다
:
DECLARE @fromDate varchar
SET @fromDate = '2011-06-01'
SELECT TOP 100
sum((CASE WHEN D.Typ_dokumentu = 0x0000000000000003
AND D.Data_platnosci >=
(SELECT TOP 1 Data_platnosci
FROM Dokumenty
WHERE Pozew_Id = P.Pozew_Id
AND Nazwa_kosztu = 0x0000000000000008
AND Data_platnosci >= @fromDate
GROUP BY Pozew_Id)
AND Data_platnosci < DATEADD(mm,DATEDIFF(mm,0,
(SELECT TOP 1 Data_platnosci
FROM Dokumenty
WHERE Pozew_Id = P.Pozew_Id
AND Nazwa_kosztu = 0x0000000000000008
AND Data_platnosci >= @fromDate
GROUP BY Pozew_Id)
) + 1,0) THEN Kwota_PLN ELSE 0 END)) AS 'M0'
FROM
Dokumenty D
JOIN Pozew P
ON D.Pozew_Id = P.Pozew_Id
WHERE
((P.NGp IS NOT NULL
AND
P.NGp < 200)
OR
(P.NGp IS NULL
AND
P.NGz < 200))
AND
P.Stan IN ('PZ-PORAŻKA','PZ-PORAŻ-UB','PZ-PSPPOR-SP')
AND
(SELECT TOP 1
dbo.Dokumenty.Data_platnosci
FROM
dbo.Dokumenty
WHERE
dbo.Dokumenty.Pozew_Id = P.Pozew_Id
AND
dbo.Dokumenty.Nazwa_kosztu = 0x0000000000000008
ORDER BY
dbo.Dokumenty.Data_platnosci) >= @fromDate
죄송합니다 @Filip 드 보스를 보여줍니다 :
는 그런 다음 합계입니다/ – Misiu
걱정할 필요가 없습니다. vg에서 gg = G에. –