【问题标题】:SQL Server CountSQL Server 计数
【发布时间】:2014-07-25 16:47:32
【问题描述】:

我有一种情况,我需要计算作业表中每个作业号的记录(行)数。我有以下执行此操作的选择脚本。

Select job, COUNT (*) AS 'Lines'
FROM jobtable
GROUP BY job


Job       Lines
--------- --------
1         26

2         12

3         46
...

现在我想使用名为“时间”的列中的计数结果来更新第二个表“材料”。所以在名为materials的表中job = 1 update time = 26,其中job is = 2 update the time = 12 etc......

【问题讨论】:

标签: sql-server


【解决方案1】:

除了 Rahul 提供的答案之外,如果您使用的是 SQL Server 2005 或更高版本,则可以使用CTE,我个人认为它比使用子查询的构造更容易理解:

with CountsCTE as
(
    select [job], count(*) as [lines]
    from [jobtable]
    group by [job]
)
update [materials]
set [time] = C.[lines]
from [materials] M
    inner join [CountsCTE] C on M.[job] = C.[job];

如果您使用的是 SQL Server 2008 或更高版本,则可以将 UPDATE 替换为 MERGE

with CountsCTE as
(
    select [job], count(*) as [lines]
    from [jobtable]
    group by [job]
)
merge into [materials] M
    using [CountsCTE] C on M.[job] = C.[job]
    when matched then update set M.[time] = C.[lines];

【讨论】:

    【解决方案2】:

    您可以像下面这样尝试,将您的materials 表与您当前的查询结果相结合

    UPDATE
        m
    SET
        [time] = lines
    FROM
        materials m
        JOIN
    (
    Select job, COUNT (*) AS 'Lines'
    FROM jobtable
    GROUP BY job
    ) tab on m.job = tab.job
    

    【讨论】:

      猜你喜欢
      • 2013-05-08
      • 2014-10-17
      • 2016-03-27
      • 2012-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多