首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有最大值的增量变量的SQL连接表数据

具有最大值的增量变量的SQL连接表数据
EN

Stack Overflow用户
提问于 2019-09-24 13:13:17
回答 2查看 112关注 0票数 2

我想知道如何获得两个辅助表的联接查询,以获得一组完整的生产线测试槽“名称”或“标记”

第一个辅助表包含关于某台机器有多少插槽的信息。看起来就像

代码语言:javascript
复制
Machine Types AUX table
------------------------------------------------------
MachineTypeID   SlotNumber
1               5
2               3
3               10

第二个有每条生产线的机器ID列表。看上去:

代码语言:javascript
复制
Lines AUX table
----------------------------------
LineID   MachineID   MachineTypeID
1        PR00231     1
1        PR00049     2
2        PR00147     1
2        PR00017     2
2        PR00178     3

我不知道如何使用机器I列表和每台机器的插槽数构建"MachineID+SlotNum“标记列表。

在逐行过滤时,预期结果如下:

代码语言:javascript
复制
LINE 2 list of slotsTAGs:
-----------------------------------
PR00147_Slot1
PR00147_Slot2
PR00147_Slot3
PR00147_Slot4
PR00147_Slot5
PR00017_Slot1
PR00017_Slot2
PR00017_Slot3
PR00178_Slot1
PR00178_Slot2
PR00178_Slot3
PR00178_Slot4
PR00178_Slot5
PR00178_Slot6
PR00178_Slot7
PR00178_Slot8
PR00178_Slot9
PR00178_Slot10

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-09-24 13:36:49

要生成这个结果,您需要形成一个数字表,该表由从1到MAX(SlotNumber)的数字组成。在这个查询中,我使用了一个递归的CTE来完成这个任务。然后,这可以是JOINed到LinesTypes表,以形成列表:

代码语言:javascript
复制
WITH cte1 AS (
SELECT  MAX(SlotNumber) AS MaxSlot FROM Types
), cte2 (Slot) AS 
(SELECT 1 AS Slot
 UNION ALL
 SELECT Slot+1 FROM cte2 WHERE Slot < (SELECT MaxSlot FROM cte1))
SELECT CONCAT(l.MachineID, '_Slot', c.Slot) AS Slots
FROM Lines l
JOIN Types t ON t.MachineTypeID = L.MachineTypeID
JOIN cte2 c ON c.Slot <= t.SlotNumber
WHERE l.LineID = 2
ORDER BY l.MachineId, c.Slot

输出:

代码语言:javascript
复制
Slots
PR00017_Slot1
PR00017_Slot2
PR00017_Slot3
PR00147_Slot1
PR00147_Slot2
PR00147_Slot3
PR00147_Slot4
PR00147_Slot5
PR00178_Slot1
PR00178_Slot2
PR00178_Slot3
PR00178_Slot4
PR00178_Slot5
PR00178_Slot6
PR00178_Slot7
PR00178_Slot8
PR00178_Slot9
PR00178_Slot10

dbfiddle演示

票数 0
EN

Stack Overflow用户

发布于 2019-09-24 16:36:20

检查这段代码-

代码语言:javascript
复制
IF OBJECT_ID('[Machine Types AUX]') IS NOT NULL
    DROP TABLE [Machine Types AUX]

CREATE TABLE [Machine Types AUX]
(
MachineTypeID INT NOT NULL IDENTITY(1,1) CONSTRAINT [PK_MachineTypesAUX] PRIMARY KEY CLUSTERED,
SlotNumber INT NOT NULL
)
GO

INSERT INTO [Machine Types AUX] (SlotNumber)
VALUES (5),(3),(10)

IF OBJECT_ID('[Lines AUX]') IS NOT NULL
    DROP TABLE [Lines AUX]

CREATE TABLE [Lines AUX]
(
LineID INT NOT NULL,
MachineID VARCHAR(10) NOT NULL,
MachineTypeID INT NOT NULL
)
GO

INSERT INTO [Lines AUX] (LineID,MachineID,MachineTypeID)
VALUES (1,'PR00231',1),
(1,'PR00049',2),
(2,'PR00147',1),
(2,'PR00017',2),
(2,'PR00178',3)

--SELECT * FROM [Machine Types AUX]
--SELECT * FROM [Lines AUX]

--EXPECTED_RESULT:
SELECT CONCAT(MachineID,'_Slot',SlotNumber) AS slotsTAGs 
FROM [Machine Types AUX] T INNER JOIN [Lines AUX] T1 ON T.MachineTypeID=T1.MachineTypeID
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58081142

复制
相关文章

相似问题

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