如何将2列中具有相似ID的2条记录统计为一列?

时间:2016-07-13 13:18:06

标签: sql-server tsql

我有"任务"按系统定义(Project Server)。 对于每个任务行,有多个列正在使用,某些任务可能具有不同的日期和其他信息,但我想计算或合并在两列中具有相同数据的记录:"Tool ID""Activity type"

例如:

Task Index      Finish Date     Activity type      Tool ID      ...

741             3/20/2016       T1                 100123
742             3/28/2016       Delay T1           100123
743             4/2/2016        T1                 100123
744             4/10/2016       T2                 100123
...
...

我希望将具有类似工具ID和活动类型(索引:741,743)的2条记录计为1。

忽略输出中我需要的日期,索引和其他列,但我的报告中有一个字段或其他内容,它将计算" 100123"的组合。和" T1"为1。

尝试了不同的,分组的和其他一些技巧,但它没有用。

3 个答案:

答案 0 :(得分:0)

也许你可以连接这两个字段并将它们区分开来:

count(distinct (tool_id||activity_type))

答案 1 :(得分:0)

使用CTE执行计数,然后将其与原始数据合并。

WITH CTE1 AS (
    SELECT [Tool ID], [Activity type], COUNT(*) [MyCount] 
    FROM @MyTable
    GROUP BY [Tool ID], [Activity type]
    )
SELECT A.*, C.MyCount 
FROM @MyTable A INNER JOIN CTE1 C
    ON  A.[Activity type] = C.[Activity type] AND 
        A.[Tool ID] = C.[Tool ID] 

答案 2 :(得分:0)

尝试以下查询

DECLARE @Tbl TABLE ([Task Index] INT, [Finish Date] DATETIME, [Activity type] NVARCHAR(50), [Tool ID] INT)

INSERT INTO @Tbl VALUES (741, N'3/20/2016', 'T1', 100123)
INSERT INTO @Tbl VALUES (742, N'3/28/2016', 'Delay T1', 100123)
INSERT INTO @Tbl VALUES (743, N'4/2/2016',  'T1', 100123)
INSERT INTO @Tbl VALUES (744, N'4/10/2016', 'T2', 100123)

SELECT
    COUNT(*) AS YourCount -- Output 3
FROM
(
    SELECT DISTINCT     
        T.[Activity type],
        T.[Tool ID]     
    FROM
        @Tbl T
) A