開発中のプロジェクトは、次のサブスクリプション レベルのビジネス ディレクトリです: プラチナ、ゴールド、シルバー、ブロンズ
このタスクで問題となっているテーブルが 3 つあります。重要な列を括弧内に入れます。
BD_Listing (ListingID、LevelID、Active)
- ListingID、INT、PK
- LevelID、INT 4=ブロンズ、5=シルバー、6=ゴールド、7=プラチナ
- アクティブ、ビット
BD_ListingOwner (ユーザーID、リストID)
- UserID (認証されたユーザーの UserID です)
- ListingID (最初のリストが作成されると、ユーザー ID と ListingID がこのテーブルに入力されます。
BD_Storefront (RecurringSubscriptionID、数量、VariantID、ステータス)
- RecurringSubscriptionID PK
- 数量 (たとえば、ゴールドを選択した場合、そのレベルに対して複数のライセンスを選択できます)
- VariantID (BD_Listing テーブルとは若干異なります。1=ブロンズ、2=シルバー、3=ゴールド、4=プラチナ)
- ステータス (True または False)
購入後、ユーザーはリストの作成を開始できるページに移動します。そのページには、表のようなモジュールがあります。
レベル---------アクティブ/残り----------アクション
プラチナ------1/0----------------------------------追加ライセンスの購入
ゴールド-----------0/2----------------------------------ゴールド リストを作成する
シルバー ----------0/0-------------------------------追加ライセンスの購入
ブロンズ--------0/0----------------------------------追加ライセンスの購入
基本的に、次のことを行う正しい SQL クエリを理解する必要があります。
- BD_Storefront テーブルをチェックして、ログインしているユーザーの @passedUserID に関連付けられているアクティブなリストの数を確認し、プラチナ、ゴールド、シルバー、およびブロンズの在庫数を確認します。
- BD_ListingOwner テーブルをチェックして、@passedUserID に関連付けられたリストの数を取得します
- BD_ListingOwner テーブルと関連付けて BD_Listing テーブルをチェックし、LevelID を確認して、実際に作成されたレベル タイプを確認します。これらの整数は、BD_Storefront テーブルにあるものとは少し異なることに注意してください。
ジョンが 1 回の注文で 2 つのゴールドを購入し、BD_Storefront テーブルに数量 2 が表示され、1 か月後に別のゴールドを購入して、テーブルに別の行を作成する可能性があることを念頭に置いて、各タイプの合計数量を確認する必要があります。数量 1 で、合計 3 つのライセンスを取得します。
これまでに私が思いついたSQLは次のとおりです。
SELECT
a.[RecurringSalesOrderID]
,a.[UserID]
,a.[PortalID]
,a.[ProductVariantID]
,a.[Quantity]
,a.[NextRecurringDate]
,a.[Status]
,a.[OriginalSalesOrderID]
,a.[CreateDate]
,a.[UpdateDate]
,b.[UserID]
,b.[ListingID] AS OwnerListingID
,c.[ListingID] AS ListingListingID
,c.[LevelID]
,(SELECT SUM(Quantity) FROM BD_Storefront WHERE (UserID = @passedUserID) AND (ProductVariantID = 1) AND (Status = 1)) AS ActiveBronze
,(SELECT SUM(Quantity) FROM BD_Storefront WHERE (UserID = @passedUserID) AND (ProductVariantID = 2) AND (Status = 1)) AS ActiveSilver
,(SELECT SUM(Quantity) FROM BD_Storefront WHERE (UserID = @passedUserID) AND (ProductVariantID = 3) AND (Status = 1)) AS ActiveGold
,(SELECT SUM(Quantity) FROM BD_Storefront WHERE (UserID = @passedUserID) AND (ProductVariantID = 4) AND (Status = 1)) AS ActivePlatinum
,(SELECT COUNT(ListingID) FROM BD_ListingOwner WHERE (UserID = @passedUserID)
FROM [BD_Storefront] a
JOIN [BD_ListingOwner] b
ON a.[UserID] = b.[UserID]
JOIN [BD_Listing] c
ON b.[ListingID] = c.[ListingID]
WHERE a.[UserID] = @passedUserID
AND Status = 1
ご覧のとおり、BD_Listing テーブルを分析して、特定のユーザーが既に作成した各タイプのリストの数を把握し、上記の各合計からその量を差し引いて、許可された残りを取得する方法がよくわかりません。
誰かが私を助けることができれば、それは信じられないほど素晴らしいでしょう.
どうもありがとう。