我需要一点帮助来了解 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

声明 @iTimeTypeGroupID int

声明当前光标本地只读
为了
选择 iRefTimeTypeGroupID
FROM tbl_TimeTypeGrouping
哪里 iRefCustomerID = @customerID

开路

从 cur 中获取下一个
INTO @iTimeTypeGroupID

而@@FETCH_STATUS = 0
开始
选择 PT.iRefProjectID
, PT.iRefTimeTypeID
, SUM(PT.decNumberOfHours) sumNumberOfHours
从 tbl_ProjectTransaction PT
其中 iRefTimeTypeID 位于 (
选择 iRefTimeTypeID
FROM tbl_TimeTypeGrouping
哪里 iRefTimeTypeGroupID = @iTimeTypeGroupID
和 iRefCustomerID = @customerID)
按 PT.iRefProjectID 分组
, PT.iRefTimeTypeID

从 cur 中获取下一个
INTO @iTimeTypeGroupID
结尾

关闭电流
释放当前

最佳答案

我不确定列名。所以在这个例子中,我希望 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)

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

    10-16 19:35