首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >存储过程

存储过程
EN

Stack Overflow用户
提问于 2010-12-22 18:38:52
回答 2查看 190关注 0票数 1

我有一个包含Device Type、DeviceName和label列的dataTable。

每个deviceType可以有多个设备。因此,我想编写一个存储过程,它将把标签列填充为01,02,03,04...对于每个DeviceName和DeviceType组合。

例如:

代码语言:javascript
复制
DeviceName    DeviceType     **Label**

Probe1            1           01
Probe2            1           02
Probe3            1           03
Tank1             2           01
Tank2             2           02
Pump1             3           01
Pump2             3           02  
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-12-22 18:47:19

假设DeviceName是唯一的,您可以这样使用ROW_NUMBER:

代码语言:javascript
复制
DECLARE @Data TABLE (DeviceName VARCHAR(50), DeviceType INTEGER, Label CHAR(2))
INSERT @Data VALUES ('Probe1', 1, '')
INSERT @Data VALUES ('Probe2', 1, '')
INSERT @Data VALUES ('Probe3', 1, '')
INSERT @Data VALUES ('Tank1', 2, '')
INSERT @Data VALUES ('Tank2', 2, '')
INSERT @Data VALUES ('Pump1', 3, '')
INSERT @Data VALUES ('Pump2', 3, '')

UPDATE d
SET d.Label = RIGHT('0' + CAST(x.RowNo AS VARCHAR(2)), 2)
FROM @Data d
    JOIN (
        SELECT DeviceName, ROW_NUMBER() OVER (PARTITION BY DeviceType ORDER BY DeviceName) AS RowNo
        FROM @Data
    ) x ON d.DeviceName = x.DeviceName

SELECT * FROM @Data
票数 1
EN

Stack Overflow用户

发布于 2010-12-22 18:45:17

看看如何使用ROW_NUMBER

代码语言:javascript
复制
SELECT  *,
        ROW_NUMBER() OVER(PARTITION BY DeviceType ORDER BY DeviceName) Label
FROM    Table

编辑

下面是一个小的更新示例:

代码语言:javascript
复制
DECLARE @Table TABLE(
        DeviceName VARCHAR(20),
        DeviceType INT,
        Label VARCHAR(20)
)

INSERT INTO @Table SELECT 'Probe1',1,''
INSERT INTO @Table SELECT 'Probe2',1,''
INSERT INTO @Table SELECT 'Probe3',1,''
INSERT INTO @Table SELECT 'Tank1',2,''
INSERT INTO @Table SELECT 'Tank2',2,''
INSERT INTO @Table SELECT 'Pump1',3,''
INSERT INTO @Table SELECT 'Pump2',3,''


;WITH Vals AS (
        SELECT  DeviceName,
                DeviceType,
                ROW_NUMBER() OVER(PARTITION BY DeviceType ORDER BY DeviceName) Label
        FROM    @Table
)
UPDATE  @Table
SET     Label = Vals.Label
FROM    @Table t INNER JOIN
        Vals    ON  t.DeviceName = Vals.DeviceName
                AND t.DeviceType = Vals.DeviceType
SELECT  *
FROM    @Table
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4508302

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档