【发布时间】:2019-09-22 03:15:55
【问题描述】:
我编写了一个 SQL 查询,该查询生成如下表。
需要为每个业务将结果分组到一行中。我已经尝试了很多方法,但我无法做到这一点。我尝试将最终表数据插入到临时表中,然后对临时表执行分组,但这不会产生正确的输出。
;WITH Generate_Dates(Start_Date, End_Date) AS (
SELECT
CAST(StartDateUtc AS Date),
CAST(
CASE WHEN [bg].EndDateUtc IS NULL THEN GETDATE() ELSE CAST([bg].EndDateUtc AS Date) end AS Date
)
FROM
BusinessGoal AS [bg] WITH (NOLOCK)
WHERE
[bg].Period = 'Year'
UNION ALL
SELECT
DATEADD(yy, 1, Start_Date),
End_Date
FROM
Generate_Dates
WHERE
DATEADD(yy, 1, Start_Date) < End_Date
)
SELECT
(
Generate_Dates.Start_Date
) AS "Start Period Date",
(
Generate_Dates.End_Date
) AS "End Period Date",
[bg].BusinessRefId AS 'Brand',
(
CAST (
[bg].Amount AS DECIMAL
)
) AS "Committed Transaction Fee",
(
SELECT
CAST (
sum (
(
CASE WHEN [s].Credit = 0 THEN - [s].SettlementAmount ELSE [s].SettlementAmount END
)
) AS DECIMAL
)
) AS "Actual Transaction Fee",
(
SELECT
TOP 1 (
CASE [s].Culture WHEN 'en-US' THEN 'USD' WHEN 'en-CA' THEN 'CAD' WHEN 'en-IE' THEN 'EUR' WHEN 'en-AU' THEN 'AUD' WHEN 'en-NZ' THEN 'NZD' WHEN 'en-Gbg' THEN 'GbgP' WHEN 'es-MX' THEN 'MXN' WHEN 'jp-JP' THEN 'JPY' WHEN 'nbg-NO' THEN 'NOK' end
)
FROM
Settlement AS [s] WITH (NOLOCK)
) AS "Currency"
FROM
BusinessGoal AS [bg] WITH (NOLOCK)
INNER JOIN Settlement AS [s] WITH (NOLOCK) ON [bg].BusinessRefId = [s].CompanyRefId
INNER JOIN OrderProductVariant AS [opv] WITH (NOLOCK) ON
(
[opv].MRefId = [s].CompanyRefId
AND [opv].Id = [s].OrderProductVariantId
)
INNER JOIN [Order] AS [o] WITH (NOLOCK) ON [o].Id = [opv].OrderId
INNER JOIN Generate_Dates ON GoalType = 'CommittedTransactionFee'
WHERE
StartDateUtc <= [s].CreatedOnUtc
AND (
(
EndDateUtc >= [s].CreatedOnUtc
)
OR (EndDateUtc is null)
)
GROUP BY
Start_Date,
End_Date,
BusinessRefId,
Amount
输出:
Start Period Date End Period Date brand Committed Transaction Fee
2019-06-07 2019-08-26 NIKE 45000
2019-06-07 2019-08-26 ADIDAS 18000
2019-06-07 2019-08-26 ADIDAS 18000
2019-06-14 2019-08-26 NIKE 45000
2019-06-14 2019-08-26 ADIDAS 18000
2019-06-14 2019-08-26 ADIDAS 18000
2019-07-25 2019-08-26 NIKE 45000
2019-07-25 2019-08-26 ADIDAS 18000
2019-07-25 2019-08-26 ADIDAS 18000
【问题讨论】:
-
MySQL 还是 SQL Server?
-
MySQL SQL Server。仅在发布问题时标记适当的 RDBMS,而不是使用不同的标记发送垃圾邮件。
-
轻松为您提供帮助:minimal reproducible example
-
如果您希望每个业务有一个输出行,则需要按
BusinessRefId分组。然后,您需要决定如何汇总其他列。是否应该对它们进行平均、求和等? -
根据您发布的查询,您将其按五列分组!您需要按要对其进行分组的一列对其进行分组。
标签: sql sql-server