我正在使用SQL Server 2008,我迫切需要sql查詢或存儲過程來顯示任何類別或子類別中的頂級品牌。例如,如果我通過IdCategory = 2,結果集應顯示電子產品中的頂級品牌,通過對idCategory = 2以及其子類別和子子類別執行產品計數。如果我通過IdCategory = 38,結果應顯示電話&移動設備以及移動電話中的頂級品牌。我希望我能夠明確我的要求。任何類別或子類別中的熱門品牌列表
下面是我的數據庫中的表格。
分類
IdCategory CategoryName ParentCategoryId
---------------------------------------------------------
1 Appliances Null
2 Electronics Null
38 Phones & Mobile Devices 2
39 Cameras & Photography 2
115 Mobile Phones 38
121 Digital Cameras 39
品牌
IdBrand BrandName
------------------------
1 Nokia
2 Samsung
3 Canon
下表打破了許多人類別和品牌表之間的多對多關係
CategoriesBrands
IdCategoriesBrand IdCategory IdBrand
-----------------------------------------
1 2 1
2 38 1
3 115 1
4 2 2
5 38 2
6 115 2
產品
IdProduct Product Name IdCategory IdBrand
---------------------------------------------------------
1 AAAA 115 1
2 BBBB 115 2
3 CCCC 121 3
4 DDDD 115 1
5 EEEE 121 3
假設有關產品表
- 產品只能在第三層子子類(E添加。3G手機,數碼Camerass)
這裏是腳本來創建表
CREATE TABLE [dbo].[Categories](
[IdCategory] [bigint] NOT NULL,
[CategoryName] [nvarchar](50) NULL,
[ParentCategoryId] [bigint] NULL
CONSTRAINT [PK_Categories_IdCategory] PRIMARY KEY CLUSTERED ( [IdCategory] ASC)
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[Brands](
[IdBrand] [bigint] NOT NULL,
[BrandName] [nvarchar](50) NULL
CONSTRAINT [PK_Brands_IdBrand] PRIMARY KEY CLUSTERED ( [IdBrand] ASC)
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[CategoriesBrands](
[IdCategoriesBrand] [bigint] NOT NULL,
[IdCategory] [bigint] NULL,
[IdBrand] [bigint] NULL,
CONSTRAINT [PK_CategoriesBrands] PRIMARY KEY CLUSTERED ( [IdCategoriesBrand] ASC)
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[CategoriesBrands] WITH CHECK ADD CONSTRAINT [FK_CategoriesBrands_Brands] FOREIGN KEY([IdBrand])
REFERENCES [dbo].[Brands] ([IdBrand])
GO
ALTER TABLE [dbo].[CategoriesBrands] CHECK CONSTRAINT [FK_CategoriesBrands_Brands]
GO
ALTER TABLE [dbo].[CategoriesBrands] WITH CHECK ADD CONSTRAINT [FK_CategoriesBrands_Categories] FOREIGN KEY([IdCategory])
REFERENCES [dbo].[Categories] ([IdCategory])
GO
ALTER TABLE [dbo].[CategoriesBrands] CHECK CONSTRAINT [FK_CategoriesBrands_Categories]
GO
CREATE TABLE [dbo].[Products](
[IdProduct] [bigint] NOT NULL,
[ProductName] [nvarchar](200) NULL,
[IdCategory] [bigint] NULL,
[IdBrand] [bigint] NULL
CONSTRAINT [PK_Products_IdProduct] PRIMARY KEY CLUSTERED ( [IdProduct] ASC)
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[Products] WITH CHECK ADD CONSTRAINT [FK_Products_Brands] FOREIGN KEY([IdBrand])
REFERENCES [dbo].[Brands] ([IdBrand])
GO
ALTER TABLE [dbo].[Products] CHECK CONSTRAINT [FK_Products_Brands]
GO
ALTER TABLE [dbo].[Products] WITH CHECK ADD CONSTRAINT [FK_Products_Categories] FOREIGN KEY([IdCategory])
REFERENCES [dbo].[Categories] ([IdCategory])
GO
ALTER TABLE [dbo].[Products] CHECK CONSTRAINT [FK_Products_Categories]
GO
下面是腳本插入表格
INSERT INTO Categories (IdCategory, CategoryName, ParentCategoryId) VALUES(1, 'Appliances', NULL)
INSERT INTO Categories (IdCategory, CategoryName, ParentCategoryId) VALUES(2, 'Electronics', NULL)
INSERT INTO Categories (IdCategory, CategoryName, ParentCategoryId) VALUES(38, 'Phones & Mobile Devices', 2)
INSERT INTO Categories (IdCategory, CategoryName, ParentCategoryId) VALUES(39, 'Cameras & Photography', 2)
INSERT INTO Categories (IdCategory, CategoryName, ParentCategoryId) VALUES(115, 'Mobile Phones', 38)
INSERT INTO Categories (IdCategory, CategoryName, ParentCategoryId) VALUES(121, 'Digital Cameras', 39)
INSERT INTO Brands (IdBrand, BrandName) VALUES(1, 'Nokia')
INSERT INTO Brands (IdBrand, BrandName) VALUES(2, 'Samsung')
INSERT INTO Brands (IdBrand, BrandName) VALUES(3, 'Canon')
INSERT INTO CategoriesBrands (IdCategoriesBrand, IdCategory, IdBrand) VALUES(1, 2, 1)
INSERT INTO CategoriesBrands (IdCategoriesBrand, IdCategory, IdBrand) VALUES(2, 38, 1)
INSERT INTO CategoriesBrands (IdCategoriesBrand, IdCategory, IdBrand) VALUES(3, 115, 1)
INSERT INTO CategoriesBrands (IdCategoriesBrand, IdCategory, IdBrand) VALUES(4, 2, 2)
INSERT INTO CategoriesBrands (IdCategoriesBrand, IdCategory, IdBrand) VALUES(5, 38, 2)
INSERT INTO CategoriesBrands (IdCategoriesBrand, IdCategory, IdBrand) VALUES(6, 115, 2)
INSERT INTO Products (IdProduct, ProductName, IdCategory, IdBrand) VALUES(1, 'AAAA', 115, 1)
INSERT INTO Products (IdProduct, ProductName, IdCategory, IdBrand) VALUES(2, 'BBBB', 115, 2)
INSERT INTO Products (IdProduct, ProductName, IdCategory, IdBrand) VALUES(3, 'CCCC', 121, 3)
INSERT INTO Products (IdProduct, ProductName, IdCategory, IdBrand) VALUES(4, 'DDDD', 115, 1)
INSERT INTO Products (IdProduct, ProductName, IdCategory, IdBrand) VALUES(5, 'EEEE', 121, 3)
一些樣本數據到目前爲止,我已經試過這裏面給我的前5個品牌沒有分類
SELECT TOP 5
b1.IdBrand,
ISNULL(b1.BrandName, '') AS BrandName,
count(p.IdProduct) AS 'ProductsCount'
FROM Brands b1
LEFT OUTER JOIN Products p
ON b1.IdBrand = p.IdBrand
GROUP BY b1.IdBrand, b1.BrandName
ORDER BY ProductsCount DESC
它更多的看起來像你的任務/你在這裏委託功課。 – Luftwaffe
一些腳本來創建表和插入也將是有幫助的 - 我只需要一個'產品'和'類' –
不,這不是作業/任務,實際上我創建了一個消費產品評論網站並停留在此查詢上。以下是您提出的完整腳本。 – Waqas