Sql server 如何将两列中ID相似的两条记录计数为一条?

Sql server 如何将两列中ID相似的两条记录计数为一条?,sql-server,tsql,Sql Server,Tsql,我有系统定义为“任务”的记录(Project Server)。 对于每个任务行,使用了多个列,有些任务可能有不同的日期和其他信息,但我想计算或合并两列中具有相同数据的记录:“工具ID”和“活动类型” 例如: Task Index Finish Date Activity type Tool ID ... 741 3/20/2016 T1 100123 742 3/2

我有系统定义为“任务”的记录(Project Server)。 对于每个任务行,使用了多个列,有些任务可能有不同的日期和其他信息,但我想计算或合并两列中具有相同数据的记录:
“工具ID”
“活动类型”

例如:

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和活动类型(索引:741743)的2条记录计为1

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


尝试了distinct、group by和其他一些技术,但都不起作用。

也许您可以将这两个字段连接起来,并对它们进行区分计数:

count(distinct (tool_id||activity_type))

也许您可以将这两个字段连接起来,并将它们分别计数:

count(distinct (tool_id||activity_type))

使用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] 

使用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] 
尝试以下查询

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
尝试以下查询

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

“忽略输出上的日期…我需要”-如果您要合并两条记录,您需要在输出中看到哪一个日期?您能举一个例子,给出您想要的结果吗?这听起来像是一个完美的场景示例,要求使用
分组,那么您说它“不起作用”是什么意思?您能分享您尝试过的查询和您看到的问题吗?嗨,我在后面的文章中分享了这个查询。我需要在报告输出中包含的日期是:工具ID活动计数T1计数延迟T1 100123 T1 2 0 100123延迟T1 0 1 100123 T2 0 0“忽略日期…我需要输出”-如果您要合并两条记录,您需要在输出中查看哪一个日期?您能举出一个示例,给出您想要的结果吗?这听起来像是一个完美的场景示例,需要一个
分组,那么您说它“不起作用”是什么意思?您能分享您尝试过的查询和您看到的问题吗?嗨,我在后面的文章中分享了这个查询。我需要在报告输出中包含的日期是:工具ID活动计数T1计数延迟T1 100123 T1 2 0 100123延迟T1 0 1 100123 T2 0 0