首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >基于列的N值重复行的Select语句

基于列的N值重复行的Select语句
EN

Stack Overflow用户
提问于 2016-02-23 15:46:46
回答 2查看 184关注 0票数 2

我有一个电源表,用来存储建筑线路的细节。电路可以是1相,也可以是3相,但在电路表中总是表示为1行。

我想把电路的细节插入到连接面板到电路的连接表中,我现在的电路表有以下详细信息

代码语言:javascript
运行
复制
CircuitID | Voltage | Phase | PanelID | Cct | 
    1     |   120   |   1   |    1    |   1 |
    2     |   208   |   3   |    1    |   3 |
    3     |   208   |   2   |    1    |   8 |

是否有可能创建一个select,当它看到一个3阶段行时,它会选择3行(或2行select 2行)并每次将Cct列增加1,还是必须创建一个循环?

代码语言:javascript
运行
复制
CircuitID | PanelID | Cct | 
    1     |    1    |   1 |
    2     |    1    |   3 |
    2     |    1    |   4 |
    2     |    1    |   5 |
    3     |    1    |   8 |
    3     |    1    |   9 |
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-23 15:58:01

您可以使用一个递归的cte来完成这个任务。

代码语言:javascript
运行
复制
WITH cte AS
(
    SELECT [CircuitID], [Voltage], [Phase], [PanelID], [Cct], [Cct] AS [Ref]  
    FROM [Power]
    UNION ALL
    SELECT [CircuitID], [Voltage], [Phase], [PanelID], [Cct] + 1, [Ref]  
    FROM cte 
    WHERE [Cct] + 1 < [Phase]  + [Ref] 
)
SELECT [CircuitID], [PanelID], [Cct] 
FROM cte
ORDER BY [CircuitID]
票数 0
EN

Stack Overflow用户

发布于 2016-06-21 17:38:21

最简单的方法,

代码语言:javascript
运行
复制
Select y.* from (
Select 1 CircuitID,120 Voltage,1 Phase,1 PanelID, 1 Cct
union
Select 2,208,3,1,3
union
Select 3,208,2,1,8)y, 
(Select 1 x
union 
Select 2 x
union 
Select 3 x)x
Where x.x <= y.Phase

直接复制粘贴这个并尝试,它将运行100%。在那之后,把我的“Y”桌换成你真正的桌子。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35581966

复制
相关文章

相似问题

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