ホームページ > データベース > mysql チュートリアル > ゼロ値を持つ個別のレコードに対して PIVOT クエリを使用するときにデータ損失を回避するにはどうすればよいですか?

ゼロ値を持つ個別のレコードに対して PIVOT クエリを使用するときにデータ損失を回避するにはどうすればよいですか?

DDD
リリース: 2025-01-05 20:20:41
オリジナル
962 人が閲覧しました

How to Avoid Data Loss When Using PIVOT Queries on Distinct Records with Zero Values?

個別レコードに対する PIVOT クエリでのデータ損失の回避

問題:
PIVOT クエリは再構築に役立ちますデータを使用して情報をより体系的に表示します。ただし、個別のレコードを処理する場合、MAX 集計関数によってゼロ値が省略され、データが不完全になる可能性があります。

解決策:
すべての個別のレコードを保持するには、値がゼロの場合は、ROW_NUMBER() 関数を PIVOT クエリに組み込むことができます。このアプローチでは、各レコードに行番号を割り当て、アクティビティとパーセンテージ間の関連付けを維持します。

;with cte as 
(
    select *, ROW_NUMBER() over (partition by name order by percentage desc) ROWNUM
    from A
),
cte2 as
(
    SELECT Id,Code,ROWNUM,James,James_,Sam,Sam_,Lisa,Lisa_
    FROM cte
    PIVOT(MAX(activity)
          FOR name IN (James,Sam,Lisa)) AS PVTTable PIVOT
          (
          MAX(percentage)
          FOR name1 IN (James_,Sam_,Lisa_)) AS PVTTable1
)
select Id, Code, MAX(James) James, MAX(James_) James_, MAX(Sam) Sam, MAX(Sam_) Sam_, MAX(Lisa) Lisa, MAX(Lisa_) Lisa_
from cte2
group by Id, Code, ROWNUM
ログイン後にコピー

例:

次の表を考えてみましょう:

Id Code percentage name name1 activity
1 Prashant 43.43 James James_ Running
1 Prashant 70.43 Sam Sam_ Cooking
1 Prashant 90.34 Lisa Lisa_ Walking
1 Prashant 0.00 James James_ Stealing
1 Prashant 0.00 James James_ Lacking
1 Prashant 73 Sam Sam_ Cooking 1

以前は、標準の PIVOT クエリは次のように生成されていました。 result:

Id Code James James_ Sam Sam_ Lisa Lisa_
1 Prashant Running 43.43 Cooking 1 73 Walking 90.34
1 Prashant Stealing 0.0 Cooking 3.43 NULL NULL
1 Prashant NULL NULL NULL NULL NULL NULL

ただし、ROW_NUMBER() 関数を組み込むことにより、変更されたクエリはすべての個別のレコードを保持します:

Id Code James James_ Sam Sam_ Lisa Lisa_
1 Prashant Running 43.43 Cooking 1 73 Walking 90.34
1 Prashant Stealing 0.00 Cooking 3.43 NULL NULL
1 Prashant Lacking 0.00 NULL NULL NULL NULL

このアプローチにより、すべての個別のアクティビティが表示されます。パーセント値が 0 であるため、データがより正確に表現されます。

以上がゼロ値を持つ個別のレコードに対して PIVOT クエリを使用するときにデータ損失を回避するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート