gpt4 book ai didi

sql-server - 字段未修复时使用 Pivot 的 SQL 查询

转载 作者:搜寻专家 更新时间:2023-10-30 20:36:05 26 4
gpt4 key购买 nike

在 SQL 中使用数据透视函数之前,我得到了这个记录结构

enter image description here

使用 Pivot 之后:

enter image description here

这是我的 SQL 查询

SELECT

FromHubID,
FromHubName,
ToHubID,
SUM([1 - 100]) AS [1 - 100],
SUM([101 - 250]) AS [101 - 250],
SUM([251 - 500]) AS [251 - 500],
SUM([501 - 1000]) AS [501 - 1000]

FROM
(SELECT
AccountGroupID,
FromHubID,
FromHubName,
ToHubID,
T_ID,
[1 - 100],
[101 - 250],
[251 - 500],
[501 - 1000]
FROM
(
SELECT
AG.AccountGroupID
,AG.FromHubID
,FH.Hub_Name AS FromHubName
,AG.ToHubID
,AG.T_ID
,CONVERT(VARCHAR , [MinWeight]) + ' - ' + CONVERT(VARCHAR ,[MaxWeight]) AS slot
,[Rate]

FROM
[CourierDev].[dbo].[AccountGroupQuotation] AS AG
INNER JOIN HubMaster AS FH ON FH.Hub_Id = AG.FromHubID
WHERE
accountgroupid = 1

)Sourcetable

PIVOT
(
Sum(Rate)
FOR slot IN ( [1 - 100],
[101 - 250],
[251 - 500],
[501 - 1000] )
)AS AGQuotationList
)AS tbl

GROUP BY
FromHubID,
FromHubName,
ToHubID

我的问题是插槽中的字段数及其值未在此处修复我在数据透视语法中添加静态字段并选择语法对于这个特定的记录,但当槽值和槽值计数不固定时如何管理?

例如如果只有 2 种类型的记录 [1 - 100],[101 - 250] 那么我只需要两个数据透视

最佳答案

您可以使用动态 SQL:

DECLARE @columns nvarchar(max),
@sql nvarchar(max)

SELECT @columns = COALESCE(@columns,'') +','+QUOTENAME(slot)
FROM #YourTable
GROUP BY slot

SELECT @sql = N'
SELECT FromHubID,
FromHubName,
ToHubID
'+@columns+'
FROM #YourTable
PIVOT (
SUM(Rate) FOR slot IN ('+STUFF(@columns,1,1,'')+')
) as pvt'

EXEC sp_executesql @sql

输出:

FromHubID   FromHubName     ToHubID 1 - 100 101 - 250   251 - 500   501 - 1000
5 BARODA R. O. 1 1 2 3 4
5 BARODA R. O. 5 5 6 7 8

关于sql-server - 字段未修复时使用 Pivot 的 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39093508/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com