0

参加しようとしています。

ItemID、UpcCode、Facing、ItemNameArabic、ShelfCapacityなどの製品情報を 含むItemsTableからSERVICETYPEを除くすべて

UpcCodeとServiceTypeを持つテーブルScheduleに参加しています

写真にあるように、 ServiceTypeVMFまたはSRRのいずれか)を示すものを除いて、ほぼ同じデータに対して2つの行があります。

私が欲しいのは、行数を減らす必要があるということです。写真を参考にすると。 ネスカフェゴールド50Gを2回繰り返します。VMFとSRRの場合は1回。以下のいずれかのアプローチを使用して、一度だけ表示したい

2列[ブール列]のようなものです

a)VMF列[値がVMFの場合、「はい」またはそれ以外の場合は「いいえ」]

b)SRR列[値がSRRの場合、「はい」またはそれ以外の場合は「いいえ」]

または

1列[ ServiceType ]

SRRがあるかどうかをチェックする場所では、SRRのみが表示されるか、Vmfが表示されます。

上記の望ましい結果のいずれかで、行数が減少します

ありがとうございました

ここに画像の説明を入力してください

4

3 に答える 3

1

ServiceType列のみを処理することにより、ItemNameごとに1行を取得することはできません。

添付ファイルを見てください。FacingやShelfCapacityなどの他の列にさまざまなデータあります

アイテム名ごとに1行を取得する場合は、次の2つのオプションがあります。

  1. クエリから別の列を削除します。
  2. リストアイテムは、すべての異なるデータを列にピボットします。
于 2013-01-28T10:15:05.907 に答える
1
SELECT  case when vmf is null then 0 else 1 end as vmf, 
case when srr is null then 0 else 1 end as srr, 
UpcCode,date, StoreID
FROM
(SELECT itemid,items.UpcCode, ServiceType, date, ROW_NUMBER() OVER (ORDER BY servicetype) AS ROWNUMBER, s.ID as StoreID
           FROM Items join Schedule on Items.upccode= schedule.upccode
) r
PIVOT
(
max (r.rownumber)
FOR r.servicetype IN( [vmf],[srr])
) AS pvt

リンクのすばらしい答えを@nestorに感謝します

于 2013-01-28T11:04:54.350 に答える
0

Caseステートメントを使用してSelectステートメントのServiceTypeを変更してみてください。

   SELECT  ItemId,....., ServiceType =
          CASE ServiceTypes
             WHEN 'VMF' THEN 'True'
             WHEN 'SRR' THEN 'False'
             ELSE ''
          END, InLimit, IpConcantenated
        from ....
        where ...

列の繰り返しが必要な場合は、2回フェッチします

   SELECT  ItemId,.....,
          ServiceTypeVMF =
          CASE ServiceType
             WHEN 'VMF' THEN 'True'
             WHEN 'SRR' THEN 'False'
             ELSE ''
          END, 
          ServiceTypeSRR =
          CASE ServiceType
             WHEN 'VMF' THEN 'False'
             WHEN 'SRR' THEN 'True'
             ELSE ''
          END, 
          InLimit,
          IpConcantenated
        from ....
        where ...

さて、以前のケースステートメントはuに複数の行をフェッチしますが、uが述べたように「VMF」と「SNR」の2つの行しかないことを前提として、行を列に変換する場合は、これがursqlステートメントである必要があると思います。

with cte as
(select ItemID, Upccode, ..............,
  row_number() over(partition by ItemID, Upccode order by ServiceType) As rn
  ,ServiceType
  ,MinLimit
  ,IsContracted     
from Items)
select ItemID, UpcCode, 
  max(case when rn = 1 then ServiceType end) as ServiceType1,
  max(case when rn = 2 then ServiceType end) as ServiceType2,
  ,MinLimit
  ,IsContracted     
from cte
group by ItemId, UpcCode,.........,MinLimit,IsContracted;
于 2013-01-28T07:41:13.297 に答える