开发中的项目是具有以下订阅级别的业务目录:白金、黄金、白银和青铜
我有 3 张桌子与此任务有关。我将把重要的列放在括号中。
BD_Listing(ListingID、LevelID、Active)
- 列表ID、INT、PK
- LevelID,INT 4=青铜,5=银,6=金,7=铂
- 活跃,比特
BD_ListingOwner(用户 ID、列表 ID)
- UserID(这是经过身份验证的用户的 UserID)
- ListingID(当初始列表创建时,他们的 UserID 和 ListingID 被输入到这个表中。
BD_Storefront(RecurringSubscriptionID、数量、VariantID、状态)
- RecurringSubscriptionID PK
- 数量(例如,如果他们选择金牌,他们可以为该级别选择多个许可证)
- VariantID(这些与 BD_Listing 表略有不同。1=青铜,2=白银,3=黄金,4=白金)
- 状态(真或假)
购买后,用户会被带到一个页面,在那里他们可以开始创建他们的列表。该页面上有一个看起来像表格的模块:
Level---------Active/Remaining----------动作
白金版--------1/0-----------------购买附加许可证
黄金-----------0/2------------------创建黄金上市
银牌----------0/0------------------购买附加许可证
青铜--------0/0------------------购买附加许可证
所以基本上,我需要了解执行以下操作的正确 SQL 查询:
- 检查 BD_Storefront 表以查看有多少活动列表附加到登录人员的@passedUserID,并了解他们拥有的白金、黄金、白银和青铜的可用数量。
- 检查 BD_ListingOwner 表以获取附加到 @passedUserID 的列表数量
- 检查与 BD_ListingOwner 表相关的 BD_Listing 表以查看 LevelID 以了解实际创建了哪些级别类型,请记住这些整数与 BD_Storefront 表中的整数略有不同。
我需要确保获得每种类型的总数量,记住 John 可能在一个订单中购买 2 个黄金,在 BD_Storefront 表中显示 Quantity 2,一个月后可能会购买另一个黄金,在表中创建另一行数量为 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 表以了解特定用户已创建的每种类型的列表数量,并从上面的每个 SUMS 中减去该数量以获得允许的剩余数量。
如果有人可以帮助我,那将是非常棒的。
非常感谢。