首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何根据SQL中的某些条件将同一表的两行或多行合并为列?

如何根据SQL中的某些条件将同一表的两行或多行合并为列?
EN

Stack Overflow用户
提问于 2019-07-08 11:44:43
回答 2查看 95关注 0票数 0

我希望根据某些条件将同一表中的两行或多行合并的结果。

表行

在这里,我想将具有相同交易头的行合并为单行。我们忽略了预期结果合并格式(下图)中的面试位置。结果表的列数将取决于面试地点。

预期结果合并格式

解释合并表在这里九列,仅仅因为焊工贸易有三个面试地点。每个位置选择计数在结束时被合并。

我已经找到了一些解决方案,如使用案例,但在我的例子中的数据在贸易主管,面试地点是不固定的。可能是明天,人们可以根据需要将ASP.Net程序员或软件测试器放在一起。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-07-08 14:29:43

下面的脚本最多可用于3行。对于更多的行,需要在每个交易头的查询中添加更多的逻辑。但是,由于不存在id列来确定同一Trade之间的旧行和新行,因此值将放在9个不同的列上,但SelCnt列和值的顺序将不同步。但是,如果表中有一个ID或任何自动增量列,那么一切都会像魅力一样工作。

您可以查看实时演示这里

代码语言:javascript
复制
WITH CTE([Trade Head], [Select Count On Date 1], [Select Count On Date 2], [Select Count On Date 3],C1,C2,C3)
AS
(
    SELECT [Trade Head], [Select Count On Date 1], [Select Count On Date 2],[Select Count On Date 3],
    CASE    WHEN RN = 1 THEN RN+0   WHEN RN = 2 THEN RN+2   WHEN RN = 3 THEN RN+4 END C1, 
    CASE    WHEN RN = 1 THEN RN+1   WHEN RN = 2 THEN RN+3   WHEN RN = 3 THEN RN+5 END C2, 
    CASE    WHEN RN = 1 THEN RN+2   WHEN RN = 2 THEN RN+4   WHEN RN = 3 THEN RN+6 END C3
    FROM
    (
        SELECT *, 
        ROW_NUMBER() OVER (
            PARTITION BY [Trade Head] 
            ORDER BY [ID]
            -- use ORDER BY [Trade Head] if no ID column exists
        )  RN
        FROM your_table            
    ) A
)

SELECT [Trade Head],
SUM(CASE WHEN C1 = 1 THEN [Select Count On Date 1] ELSE NULL END) SelCnt1,
SUM(CASE WHEN C2 = 2 THEN [Select Count On Date 2] ELSE NULL END) SelCnt2,
SUM(CASE WHEN C3 = 3 THEN [Select Count On Date 3] ELSE NULL END) SelCnt3,
SUM(CASE WHEN C1 = 4 THEN [Select Count On Date 1] ELSE NULL END) SelCnt4,
SUM(CASE WHEN C2 = 5 THEN [Select Count On Date 2] ELSE NULL END) SelCnt5,
SUM(CASE WHEN C3 = 6 THEN [Select Count On Date 3] ELSE NULL END) SelCnt6,
SUM(CASE WHEN C1 = 7 THEN [Select Count On Date 1] ELSE NULL END) SelCnt7,
SUM(CASE WHEN C2 = 8 THEN [Select Count On Date 2] ELSE NULL END) SelCnt8,
SUM(CASE WHEN C3 = 9 THEN [Select Count On Date 3] ELSE NULL END) SelCnt9
FROM CTE
GROUP BY [Trade Head]
票数 1
EN

Stack Overflow用户

发布于 2019-07-08 11:47:53

使用聚合

代码语言:javascript
复制
select Thead,max(Selcnt1),max(selcnt2),....max(selcnN) from table
group by Thead
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56934203

复制
相关文章

相似问题

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