【问题标题】:SQL Server 2005 : putting a gap in 'Group By' resultsSQL Server 2005:在“分组依据”结果中留出空白
【发布时间】:2013-03-01 11:08:25
【问题描述】:

我有一组报告由一组结果运行该组,现在运行时看起来像:

Column_1
1
2
3

代码:

Select Column_1, Other_Info  
From Some_Table  
Group By Column_1

但我希望结果集看起来像:

Column_1
1  

2

3

这可能吗?

【问题讨论】:

    标签: sql database sql-server-2005


    【解决方案1】:

    答案是肯定的,用肮脏的黑客攻击是可能的。但我会强烈建议这在 SQL 之外处理得更好。 SQL用于数据,应用层用于格式化。 (根据您处理结果的位置提出新问题可能会有所帮助)。

    为了做到这一点,您需要复制结果集但数据为空(这意味着您需要确保所有列都是 varchar)。

    然后,您需要有一种对结果集进行排序的方法,以确保空白行是交替的(下面的 Sort1 和 Sort2)

    SELECT  Column1, OtherInfo
    FROM    (   SELECT  Column_1 = CAST(Column_1 AS NVARCHAR), 
                        OtherInfo = CAST(Other_Info AS NVARCHAR), 
                        Sort1 = ROW_NUMBER() OVER(ORDER BY Column_1), 
                        Sort2 = 1
                FROM    Some_Table  
                GROUP BY Column_1, OtherInfo
                UNION ALL
                SELECT  Column_1 = N'',
                        OtherInfo = N'',
                        Sort1 = ROW_NUMBER() OVER(ORDER BY Column_1),
                        Sort2 = 2
                FROM    Some_Table  
                GROUP BY Column_1, OtherInfo
            ) d
    ORDER BY Sort1, Sort2;
    

    如果您的查询成本特别高,您可能需要考虑使用临时表,而不是选择两次并且第二次不使用任何数据。

    【讨论】:

    • 感谢您几乎可以使用,但 OtherInfo 列未被接受,因为它不在聚合函数中。
    • 您需要将其包含在 group by 或将其包含为聚合列,而无需查看您的数据或知道您的要求,我不确定。
    【解决方案2】:

    试试这个

    Select Column_1 ,Other_Info, CHAR(13) + CHAR(10) From Some_Table Group By Column_1

    【讨论】:

    • 不幸的是,这意味着我必须对不受函数影响的任何列进行分组,并且仍然显示为示例 1。
    猜你喜欢
    • 2010-09-05
    • 1970-01-01
    • 2010-10-01
    • 1970-01-01
    • 2017-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-04
    相关资源
    最近更新 更多