누군가가 나를 도와 줄 수 있습니다.다중 부분 합계가있는 SQL 쿼리
SQL 쿼리에서 부분합을 사용하려고하지만 다른 열로는 표시하려고하지 않습니다.
내가 얻는 결과와 설명과페이지의 스크린 샷
이 쿼리는 내가 가지고있다 지금까지
SELECT
ar.Person_Id AS 'Id',
pa.Serial_Number,
ar.Family_Name + ', '+ar.First_Name AS 'Name',
CASE WHEN ar.Line_Type = 'A' THEN 'Activity: '+ar.Item_Name ELSE 'Hotel: '+ar.Item_Name END AS 'Description',
CAST(IsNull(ar.Old_Amount_Excl_VAT,0) AS DECIMAL(10,2)) AS 'Amount Excl VAT',
CAST(IsNull(ar.Old_Amount_Incl_VAT,0) AS DECIMAL(10,2)) AS 'Amount Incl VAT',
CAST(IsNull(ar.Old_Amount_Incl_VAT,0) - IsNull(ar.Old_Amount_Excl_VAT,0) AS DECIMAL(10,2)) AS 'VAT Amount',
p.Currency_Code,
(
SELECT TOP 1 pt.Payment_Type + ' ' + pt.Description AS Payment_Type FROM PaymentsPerPerson ppp
LEFT OUTER JOIN PaymentCodes pc ON ppp.Client_Id = pc.Client_Id AND ppp.Project_Id = pc.Project_Id AND ppp.Payment_Code = pc.Payment_Code
LEFT OUTER JOIN PaymentTypes pt ON ppp.Client_Id = pt.Client_Id AND ppp.Project_Id = pt.Project_Id AND pt.Payment_Type = pc.Payment_Type
WHERE ppp.Client_Id = ar.Client_Id AND ppp.Project_Id = ar.Project_Id AND ppp.Person_Id = ar.Person_Id AND ppp.Line_Number IN (SELECT MAX(Line_Number) FROM PaymentsPerPerson WHERE Person_Id = ar.Person_Id)) AS Payment_Type,
(
SELECT TOP 1 convert(varchar, Payment_Date, 120) AS Payment_Date FROM PaymentsPerPerson WHERE Client_Id = ar.Client_Id AND Project_Id = ar.Project_Id AND Person_Id = ar.Person_Id ORDER BY Line_Number DESC
) AS Payment_Date,
(
SELECT TOP 1 Card_Reference FROM PaymentsPerPerson WHERE Client_Id = ar.Client_Id AND Project_Id = ar.Project_Id AND Person_Id = ar.Person_Id ORDER BY Line_Number DESC
) AS Transaction_Id,
convert(varchar, getdate(), 120) AS Date
FROM
AccountingReport ar
LEFT OUTER JOIN Participants pa ON ar.Client_Id = pa.Client_Id AND ar.Project_Id = pa.Project_Id AND ar.Person_Id = pa.Person_Id AND pa.Date_Registered IS NOT NULL
LEFT OUTER JOIN Projects p ON ar.Client_Id = p.Client_Id AND ar.Project_Id = p.Project_Id
RIGHT OUTER JOIN PaymentsPerPerson ppp ON ar.Client_Id = ppp.Client_Id AND ar.Project_Id = ppp.Project_Id AND ar.Person_Id = ppp.Person_Id
WHERE
ar.Client_Id = 'CLIENTID' AND
ar.Project_Id = 'PROJECTID' AND
(IsNull(Old_Amount_Excl_VAT,0) <> 0
OR IsNull(Old_Amount_Incl_VAT,0) <> 0)
AND pa.Date_Registered IS NOT NULL
ORDER BY
ar.Person_Id,
Item_Id,
SubItem_Id,
SubSubItem_Id
내가 ROLLUP을 사용하여 시도했지만 이것이 내가 무엇을 얻을
이 내가 어떤 SQL 전문가는 아니지만 때문에, 좋은 것 롤업에게
SELECT
CASE WHEN (GROUPING(ar.Person_Id) = 1) THEN 0
ELSE ISNULL(ar.Person_Id, 'UNKNOWN')
END AS 'Id',
CASE WHEN (GROUPING(pa.Serial_Number) = 1) THEN 0
ELSE ISNULL(pa.Serial_Number, 'UNKNOWN')
END AS Serial_Number,
CASE WHEN (GROUPING(ar.Family_Name + ', '+ar.First_Name) = 1) THEN 'ALL'
ELSE ISNULL(ar.Family_Name + ', '+ar.First_Name, 'UNKNOWN')
END AS 'Name',
CASE WHEN ar.Line_Type = 'A' THEN 'Activity: '+ar.Item_Name ELSE 'Hotel: '+ar.Item_Name END AS 'Description',
SUM(CAST(IsNull(ar.Old_Amount_Excl_VAT,0) AS DECIMAL(10,2))) AS 'Amount Excl VAT',
SUM(CAST(IsNull(ar.Old_Amount_Incl_VAT,0) AS DECIMAL(10,2))) AS 'Amount Incl VAT',
SUM(CAST(IsNull(ar.Old_Amount_Incl_VAT,0) - IsNull(ar.Old_Amount_Excl_VAT,0) AS DECIMAL(10,2))) AS 'VAT Amount',
CASE WHEN (GROUPING(p.Currency_Code) = 1) THEN 'ALL'
ELSE ISNULL(p.Currency_Code, 'UNKNOWN')
END AS Currency_Code,
(
SELECT TOP 1 pt.Payment_Type + ' ' + pt.Description AS Payment_Type FROM PaymentsPerPerson ppp
LEFT OUTER JOIN PaymentCodes pc ON ppp.Client_Id = pc.Client_Id AND ppp.Project_Id = pc.Project_Id AND ppp.Payment_Code = pc.Payment_Code
LEFT OUTER JOIN PaymentTypes pt ON ppp.Client_Id = pt.Client_Id AND ppp.Project_Id = pt.Project_Id AND pt.Payment_Type = pc.Payment_Type
WHERE ppp.Client_Id = ar.Client_Id AND ppp.Project_Id = ar.Project_Id AND ppp.Person_Id = ar.Person_Id AND ppp.Line_Number IN (SELECT MAX(Line_Number) FROM PaymentsPerPerson WHERE Person_Id = ar.Person_Id)
) AS Payment_Type,
(
SELECT TOP 1 convert(varchar, Payment_Date, 120) AS Payment_Date FROM PaymentsPerPerson WHERE Client_Id = ar.Client_Id AND Project_Id = ar.Project_Id AND Person_Id = ar.Person_Id ORDER BY Line_Number DESC
) AS Payment_Date,
(
SELECT TOP 1 Card_Reference FROM PaymentsPerPerson WHERE Client_Id = ar.Client_Id AND Project_Id = ar.Project_Id AND Person_Id = ar.Person_Id ORDER BY Line_Number DESC
) AS Transaction_Id,
CONVERT(varchar, GETDATE(), 120) AS Date
FROM
AccountingReport ar
LEFT OUTER JOIN Participants pa ON ar.Client_Id = pa.Client_Id AND ar.Project_Id = pa.Project_Id AND ar.Person_Id = pa.Person_Id AND pa.Date_Registered IS NOT NULL
LEFT OUTER JOIN Projects p ON ar.Client_Id = p.Client_Id AND ar.Project_Id = p.Project_Id
RIGHT OUTER JOIN PaymentsPerPerson ppp ON ar.Client_Id = ppp.Client_Id AND ar.Project_Id = ppp.Project_Id AND ar.Person_Id = ppp.Person_Id
WHERE
ar.Client_Id = 'CLIENTID' AND
ar.Project_Id = 'PROJECTID' AND
(IsNull(Old_Amount_Excl_VAT,0) <> 0
OR IsNull(Old_Amount_Incl_VAT,0) <> 0)
AND pa.Date_Registered IS NOT NULL
GROUP BY
ar.Client_Id,
ar.Project_Id,
ar.Person_Id,
pa.Serial_Number,
ar.Line_Type, ar.Item_Name, ar.Item_Id, ar.SubItem_Id, ar.SubSubItem_Id,
p.Currency_Code,
ar.Family_Name + ', '+ar.First_Name WITH ROLLUP
ORDER BY
ar.Person_Id,
Item_Id,
SubItem_Id,
SubSubItem_Id
어떤 아이디어를 사용하여 사용했던 쿼리입니다.
SQL Server로 할 수 있습니까? 또는이 스크립트를 생성하려면 (ASP, PHP) 스크립트가 필요합니까?
클라이언트가 버튼을 클릭 할 때 결과를 Excel 보고서로 내보내므로 SQL 쿼리로 수행 할 수 있으면 더 좋을 것입니다.
이 문제를 해결하려면 sql을 사용해야합니까? 이 쿼리를 다른 곳에서 사용하려고한다고 가정합니다. 나는보고 도구가 좋은 일을 할 수있을 것 같아요 엑셀의 피벗 테이블도 작동하고 피벗 테이블은 SQL 쿼리를 기반으로하므로 필요에 따라 새로 고칠 수 있습니다. – user3973227
그것은 SQL이어야합니다. 우리는 SQL 쿼리를 사용하여 Excel로 내 보냅니다. 이것은 꽤 많은 클라이언트가 사용하기 때문에 더 쉽게 사용할 수 있습니다. –