【问题标题】:Dividing one SQL column into subgroups with headings将一个 SQL 列划分为带有标题的子组
【发布时间】:2015-02-19 12:39:31
【问题描述】:

我有两张桌子

状态

SNO | STATUS | DEPARTMENT_ID

1   In progress      1
2    Assigned        2
3     Quoted         2
4   Development      3

部门

SNO | DEPARTMENT |

1     DESIGNING
2     MARKETING
3     PRODUCTION

现在我想要使用 SQL 存储过程得到这样的结果

Some Custom Column Name | DEPARTMENT_ID

DESIGNING                      -
In Progress                    1
MARKETING                      -
Assigned                       2
Quoted                         2
PRODUCTION                     -
Development                    3

自定义列将用于填充 Telerik RadComboBox,其中 DESIGNING、MARKETING 和 PRODUCTION 作为状态之间的分隔符。

【问题讨论】:

    标签: sql sql-server select telerik radcombobox


    【解决方案1】:
    Select Department, -1 from Department_Table
    Union
    Select StatusName, Department_ID from Status_Table
    

    请详细说明您的问题,以便我们提供更好的答案。目前看来您只想返回两个表的连接数据。

    【讨论】:

      【解决方案2】:

      通常,此类操作在应用程序级别更容易完成。您可以在 SQL 中使用union all 和order by,但是:

      select status as CustomColumnName, department
      from ((select s.status, d.department, 1 as ordering
             from status s join
                  departments d
                  on s.department_id = d.sno
            ) union all
            (select d.department, NULL, 0 as ordering
             from departments d
            )
           ) dd
      order by CustomColumnName, ordering;
      

      注意:这会将- 视为NULL。

      【讨论】:

      • 啊。对不起。我错过了订购部分。
      • 需要订购的部分吗?
      • @KalaiarasanManimaran 。 . .是的。 OP 似乎有一个特定的顺序。
      【解决方案3】:

      试试这个。其他样本数据可以吗?

      DECLARE @STATUS TABLE (
          SNO INT
          ,[STATUS] VARCHAR(50)
          ,DEPARTMENT_ID INT
          )
      
      INSERT INTO @STATUS
      VALUES (1,'In progress' ,1)
          ,(2,'Assigned',2)
          ,(3,'Quoted',2)
          ,(4,'Development',3)
      
      DECLARE @DEPARTMENT TABLE (SNO INT,DEPARTMENT VARCHAR(50))
      
      INSERT INTO @DEPARTMENT
      VALUES (    1,'DESIGNING'),(2,'MARKETING')
          ,(3,'PRODUCTION')
          --select * from @STATUS
          --select * from @DEPARTMENT
          ;
      
      WITH CTE
      AS (
          SELECT DEPARTMENT [CustomeColumn]
              ,'-' DEPARTMENT_ID
              ,sno
          FROM @DEPARTMENT
      
          UNION ALL
      
          SELECT [STATUS]
              ,cast(DEPARTMENT_ID AS VARCHAR(10))
              ,(
                  SELECT sno
                  FROM @DEPARTMENT
                  WHERE sno = a.DEPARTMENT_ID
                  )
          FROM @STATUS A
          )
      SELECT *
      FROM CTE
      ORDER BY sno
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-07
        • 2020-04-20
        • 2018-07-28
        • 2019-07-10
        • 1970-01-01
        • 2014-01-31
        相关资源
        最近更新 更多