gpt4 book ai didi

sql-server - 动态内容中的 SQL 游标

转载 作者:行者123 更新时间:2023-12-02 02:07:03 24 4
gpt4 key购买 nike

我需要一些帮助来解决 CURSOR。

我做了一个aspx报告,很简单。对于每个项目,我需要查看研究、开发和内部花费了多少小时。第一个非常简单,我只是用 3 组和相等的 3 种时间对解决方案进行了硬编码。老板认为这是一份出色的报告,所以他希望它涵盖所有客户。不幸的是,下一个客户有 5 个小组,每个小组有 2-7 种不同类型的时间。

现在我需要一个动态解决方案,我可以在其中指定组(已完成)并指定每个组的时间类型(已完成),最后我需要将这两者与记录花费时间的表结合起来。

我有一个基本光标,我可以在其中列出项目、时间类型以及在这组时间中花费了多少时间。

我有的是:
项目A -|- A组 -|- 5
项目 B -|- A 组 -|- 2
项目 C -|- A 组 -|- 10

项目 A -|- B 组 -|- 1
B 项目 -|- B 组 -|- 10
项目 C -|- B 组 -|- 2

项目 A -|- C 组 -|- 0
项目 B -|- C 组 -|- 3
C 项目 -|- C 组 -|- 7

问题是,我需要报告
标题____A组|B组|C组|N组
项目 A -|- 5 -|- 1 -|- 0 -|- x
项目 B -|- 2 -|- 10 -|- 3 -|- y
项目 C -|- 10 -|- 2 -|- 7 -|- z

DECLARE @iTimeTypeGroupID intDECLARE cur CURSOR LOCAL READ_ONLYFOR SELECT iRefTimeTypeGroupIDFROM tbl_TimeTypeGroupingWHERE iRefCustomerID = @customerIDOPEN curFETCH NEXT FROM curINTO @iTimeTypeGroupIDWHILE @@FETCH_STATUS = 0BEGIN    SELECT PT.iRefProjectID        , PT.iRefTimeTypeID        , SUM(PT.decNumberOfHours) sumNumberOfHours    FROM tbl_ProjectTransaction PT    WHERE iRefTimeTypeID IN (        SELECT iRefTimeTypeID         FROM tbl_TimeTypeGrouping         WHERE iRefTimeTypeGroupID = @iTimeTypeGroupID            AND iRefCustomerID = @customerID)    GROUP BY PT.iRefProjectID        , PT.iRefTimeTypeID    FETCH NEXT FROM cur    INTO @iTimeTypeGroupIDENDCLOSE curDEALLOCATE cur

最佳答案

我不确定列名。因此,在此示例中,我希望 tbl_ProjectTransaction 有一个名为 projectName 的列,而 tbl_TimeTypeGrouping 有一个 GroupName。就像有人在问题中提出的那样,在这种情况下你不应该使用游标。您应该使用动态枢轴。这是一个例子:

像这样获取组的名称:

DECLARE @cols VARCHAR(MAX)
SELECT @cols=STUFF
(
(
SELECT
',' +QUOTENAME(tbl_TimeTypeGrouping.sGroupName) -- ????
FROM
tbl_TimeTypeGrouping
FOR XML PATH('')
)
,1,1,'')

这会给你:

'[Group A],[Group B],[Group C],[Group N]'

然后像这样做一个动态枢轴:

DECLARE @query NVARCHAR(4000)=
N'SELECT
*
FROM
(
SELECT
tbl_ProjectTransaction.sProjectName, -- ????
tbl_ProjectTransaction.decNumberOfHours,
tbl_TimeTypeGrouping.sGroupName -- ???
FROM
tbl_ProjectTransaction
JOIN tbl_TimeTypeGrouping
ON tbl_ProjectTransaction.iRefTimeTypeID=tbl_TimeTypeGrouping.iRefTimeTypeID
) AS SourceTable
PIVOT
(
SUM(decNumberOfHours)
FOR GroupName IN ('+@cols+')
) As Pvt'
EXECUTE(@query)

引用资料:

关于sql-server - 动态内容中的 SQL 游标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14439866/

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