0

次のデータセットの検証を作成しようとしています:

SSYS | Material_Number | Characteristic | Description
001  | 000000000001111 | SH_DESC        | TEST
001  | 000000000001111 | DESIGN_TYPE    | NULL
001  | 000000000001111 | VOLTAGE        | NULL
001  | 000000000009999 | SH_DESC        | TEST2
001  | 000000000009999 | OPER_METHOD    | LIGHT
001  | 000000000009999 | FILTER_TYPE    | Filter element,Air
001  | 000000000014560 | SH_DESC        | Horn,Signal
001  | 000000000014560 | DIMENSION_SIZE | NULL
001  | 000000000014560 | FILTER_TYPE    | NULL

Material_Number でグループ化し、Material_Number グループ内で SH_DESC の説明が NOT NULL であり、他のすべての特性の説明が NULL である場合、1 (つまり true) としてカウントしたいと思います。したがって、この場合、私の結果は次のようになります。

SSYS | Material_Number | Characteristic | Description  | COUNT
001  | 000000000001111 | SH_DESC        | TEST         |  1
001  | 000000000009999 | SH_DESC        | TEST2        |  0 
001  | 000000000014560 | SH_DESC        | Horn,Signal  |  1

私の試み:

Select COUNT (*), SSYS, Material_Number, Characteristic, Description
 From myDB where (Characteristic = 'SH_DESC' AND DESCRIPTION IS NOT NULL) AND (Characteristic NOT IN ('SH_DESC') IS NULL)
GROUP BY SSYS, Material_Number, Characteristic, Description HAVING COUNT (*) < 2

どんな助けでも大歓迎です!

4

4 に答える 4

3

試す:

Select SSYS, 
       Material_Number, 
       'SH_DESC' Characteristic, 
       MAX(CASE WHEN Characteristic = 'SH_DESC' THEN Description END) Description,
       CASE WHEN MAX(CASE WHEN Characteristic = 'SH_DESC' THEN Description END) IS NOT NULL AND
                 MAX(CASE WHEN Characteristic <>'SH_DESC' THEN Description END) IS NULL 
            THEN 1
            ELSE 0
       END COUNT
From myDB
GROUP BY SSYS, Material_Number
于 2012-08-14T16:28:35.650 に答える
0

GROUP BYとオプションの代替SUM(CASE WHEN)...

 SELECT
  *,
  CASE WHEN Description IS NULL THEN 0
       WHEN EXISTS (SELECT *
                      FROM myDB as lookup
                     WHERE lookup.SSYS            = myDB.SSYS
                       AND lookup.Material_Number = myDB.Material_Number
                       AND lookup.Characteristic <> 'SH_DESC'
                       AND lookup.Description    IS NOT NULL) THEN 0
       ELSE 1 END as myCount
FROM
  myDB
WHERE
  Characteristic = 'SH_DESC'
于 2012-08-14T16:31:42.377 に答える
0

これを試してみてください-ここでは、特定の説明をフィルタリングするものがないため、説明を取得できないと思います。

CREATE TABLE yourtable(SSYS varchar(10),Material_Number varchar(100),Characteristic varchar(100),Description varchar(100))

INSERT INTO yourtable 
VALUES('001','000000000001111','SH_DESC','TEST'),
('001','000000000001111','DESIGN_TYPE','NULL'),
('001','000000000001111','VOLTAGE','NULL'),
('001','000000000009999','SH_DESC','TEST2'),
('001','000000000009999','SH_DESC','LIGHT'),
('001','000000000009999','FILTER_TYPE','Filter element,Air'),
('001','000000000014560','SH_DESC','Horn,Signal'),
('001','000000000014560','DIMENSION_SIZE','NULL'),
('001','000000000014560','FILTER_TYPE  ','NULL')

select max(SSYS),
       max(Material_Number),
       'SH_DESC' as Characteristic,
       CASE WHEN SUM(CASE WHEN Characteristic='SH_DESC' and Description is not null then 1 else 0 end) = 1 then 1 else 0 end  as cnt
from yourtable
group by Material_Number
于 2012-08-14T17:10:01.877 に答える
0

これを試して:

select ssys, material_number, 'SH_DESC' as characteristic,
       (case when sum(case when characteristic is not null and characteristic<> 'SH_DESC' and description is null then 1 else 0 end) = count(*) - 1
             then 1
             else 0
        end) as count
from t
group by ssys, material_number

マテリアルごとにグループ化し、説明が null である null 以外の特性を持つ行の数をカウントします。それに応じてカウントを設定します。

于 2012-08-14T16:28:54.720 に答える