【问题标题】:Concatenating multiple columns within a row in a single column将一行中的多个列连接到一个列中
【发布时间】:2013-07-02 11:12:39
【问题描述】:


背景:
我正在处理需要获取交叉表查询报告的 Sql2000 查询。我尝试了几种组合并使用 RollUP 得到了结果。

问题
真正的问题是我必须在只有一列的表中插入记录。
例如:
我的实际记录(在 RollUP 之后)有 3 列,如下所示:

ID|五月|六月|总计

CS|21 |54 |75
AB|12 |15 |27

(这些结果以网格格式出现)

我需要将它们插入到只有 1 列的表中的问题。格式为

数据

ID     5 月                                                                                                                                                                                                                                                                                          5 21     54     75
12     15     27

请注意,列标题也插入到第二个表中。
这有意义吗? 我知道这可以通过报告服务或水晶报告轻松完成,但我有限制不去使用它们。

提前致谢。

【问题讨论】:

    标签: sql tsql sql-server-2000


    【解决方案1】:

    听起来您只想将三(或四?)列的字符串连接成一个?

    我将为您节省通常伴随此类问题的不良练习讲座:

    根据您的示例,我假设您想要固定长度的字段,而不是分隔的字段。如果要分隔,请使用 varchar 而不是 char 并在其间放置分隔字符串。最后一列被转换为 varchar,因为您不需要额外的填充。

    SELECT CAST([ID] AS char(10)) 
       + CAST(May AS char(10)) 
       + CAST(June AS char(10)) 
       + CAST([Total] AS varchar(10)) AS column1
    FROM ...
    

    这会导致

    CS        21        54        75
    AB        12        15        27
    

    【讨论】:

    • 是的,我需要类似的解决方案,但问题是列是动态的。我提到的第一个表来自动态 SQL 查询。 SET [AT]SQL=' SELECT [Date] =COALESCE(CONVERT(VARCHAR,[Date],105),''TOTAL''),'+ [AT]SQL= + ' [NET]=SUM(ISNULL(Amt ,0)) FROM tblBase B INNER JOIN #tempMASTER T ON T.ID= B.ID GROUP BY [Date] WITH ROLLUP ORDER BY GROUPING([Date])' @SQL 包含我想要显示的月份列表。它还取决于某些标准。 PS:将[AT]替换为@
    • 另外,我还需要第一个表中的列标题。怎么弄到那个?
    • 它并不完全有效,但它确实让我想到了更接近解决方案的想法。谢谢丹尼尔。
    猜你喜欢
    • 2010-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    • 2010-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多