0
Job Batch id   Company Outlet Id   Clearance required   Hanky required 
1              10                  T                    T

今、私は次のものが欲しい

Job Batch id   Company Outlet ID    Reason    
1              10                   Clearance Required , Hanky Required 

私の脳は凍っていたので、援助が必要でしたか?

このピボット解除クエリを作成するにはどうすればよいですか?

4

4 に答える 4

1

さあ、このように列を組み合わせるだけです。STUFFを使用して最初のコンマを削除しています:

select JobBatchId, 
  CompanyOutletId,
  STUFF(
    ISNULL(CASE WHEN ClearanceRequired = 'T' THEN ',Clearance Required' END, '')  +
    ISNULL(CASE WHEN HankyRequired = 'T' THEN ',Hanky Required' END, '') 
    , 1, 1, '') Reasons
from YourTable

そしてSQLフィドル

于 2013-02-15T15:35:51.237 に答える
1

Sql クエリの 1 つの列 ( ) 内に複数の値を配置することはReasonお勧めしません。代わりに、データを表示したい場合はプレゼンテーション層に任せてください...

しかし、Sqlでそれを行う方法は次のとおりです。

SELECT
    [Job Batch Id],
    [Company Outlet Id],
    CASE 
        WHEN [Clearance Required] = 'T' 
        THEN 'Clearance Required' 
        ELSE '' END +
    -- Determine if the comma is needed or not...
    CASE 
        WHEN [Clearance Required] = 'T' 
            AND [Hanky Required] = 'T' 
        THEN ' , ' 
        ELSE '' END +
    CASE
        WHEN [Hanky Required] = 'T' 
        THEN 'Hanky Required' 
        ELSE '' END AS Reason
FROM YourTable
于 2013-02-15T15:32:33.043 に答える
1

試す:

select [Job Batch id], [Company Outlet Id],
       case [Clearance required]
            when 'T' then 'Clearance Required' + 
                case [Hanky required] when 'T' then ' , ' else '' end
       else ''
       end + case [Hanky required] when 'T' then 'Hanky Required' else '' end as [Reason]
from theTable
于 2013-02-15T15:35:15.397 に答える
1

UNPIVOTCROSS APPLYおよびを使用FOR XML PATHして結果を取得できます。

;with cte as
(
  select [Job Batch id], [Company Outlet Id],
    col, value
  from yourtable
  unpivot
  (
    value
    for col in ([Clearance required], [Hanky required])
  ) unpiv
)
select distinct t1.[Job Batch id], 
  t1.[Company Outlet Id],
  left(s.reason, len(s.reason)-1) reason
from cte t1
cross apply 
(
  select t2.col + ', '
  FROM cte t2
  where t1.[Job Batch id] = t2.[Job Batch id]
    and t1.[Company Outlet Id] = t2.[Company Outlet Id]
  FOR XML PATH('')
) s (reason)

デモで SQL Fiddle を参照してください

UNPIVOTまたは、 、STUFFおよびを使用できますFOR XML PATH

;with cte as
(
  select [Job Batch id], [Company Outlet Id],
    col, value
  from yourtable
  unpivot
  (
    value
    for col in ([Clearance required], [Hanky required])
  ) unpiv
)
select distinct t1.[Job Batch id], 
  t1.[Company Outlet Id],
  STUFF(
         (SELECT ', ' + col
          FROM cte t2
          where t1.[Job Batch id] = t2.[Job Batch id]
            and t1.[Company Outlet Id] = t2.[Company Outlet Id]
          FOR XML PATH (''))
          , 1, 1, '')  AS Reason
from cte t1

デモで SQL Fiddle を参照してください

于 2013-02-15T15:35:27.097 に答える