-1

私は次のようなテーブルを持っています

RequestNo  Facility  status 
1           BDC1      Active
1           BDC2      Active
1           BDC3      Active
2           BDC1      Active
2           BDC2      Active 

こんな感じにしたい

RequestNo  Facilty       Count 
1          BDC (1,2,3)   1
2          BDC(1,2)      1

カウントは、ファシリティ付きのステータスに基づいて表示される必要があります。FcilityvはBDCとしてのみ取得する必要があります。

4

2 に答える 2

0

これを試してください(施設が4文字コードに固定されていると仮定します)

SELECT RequestNo, Fname + '(' + FnoList + ')' Facilty, count(*) cnt
FROM 
(
    SELECT  distinct RequestNo, 
    SUBSTRING(Facility,1,3) Fname,
    stuff((
        select ',' + SUBSTRING(Facility,4,4)
        from Dummy
        where RequestNo = A.RequestNo AND
        SUBSTRING(Facility,1,3) = SUBSTRING(A.Facility,1,3)
        for xml path('')
            ) ,
         1, 1, '') as FnoList
    FROM Dummy A
) x
group by RequestNo, Fname, FnoList;

SQLデモ

于 2013-01-14T17:59:10.663 に答える
0

これは、Facility フィールドの長さに制約を課しません。先頭から文字を取り除き、末尾から数字を取り除きます。

SELECT RequestNo, FacNameNumbers, COUNT(Status) as StatusCount
FROM
(
SELECT DISTINCT
  t1.RequestNo, 
  t1.Status,
  substring(facility, 1, patindex('%[^a-zA-Z ]%',facility) - 1) + 
  '(' +
    STUFF((
      SELECT DISTINCT ', ' + t2.fac_number  
      FROM (
        select distinct 
          requestno, 
          substring(facility, 2 + len(facility) - patindex('%[^0-9 ]%',reverse(facility)), 9999) as fac_number
        from facility    
    ) t2
    WHERE t2.RequestNo = t1.RequestNo 
    FOR XML PATH (''))
  ,1,2,'') + ')' AS FacNameNumbers
FROM Facility t1
) final
GROUP BY RequestNo, FacNameNumbers

そしてSQLフィドル

于 2013-01-14T18:06:43.643 に答える