Mysql 级别-子级别类型表的SQL表架构
我创建了四个表,给出了层次分类列表。类表Mysql 级别-子级别类型表的SQL表架构,mysql,sql,Mysql,Sql,我创建了四个表,给出了层次分类列表。类表 +----+--------------+---------------+----------------+ | ID | CategoryName | Ref. Category | Something else | +----+--------------+---------------+----------------+ 参考类别(链接至第1列) 例如, +---+------------+---+------+ | 1 | Elektronik
+----+--------------+---------------+----------------+
| ID | CategoryName | Ref. Category | Something else |
+----+--------------+---------------+----------------+
参考类别(链接至第1列)
例如,
+---+------------+---+------+
| 1 | Elektronik | 0 | ... |
| 2 | Drink | 0 | ... |
| 3 | Computer | 1 | ... |
| 4 | Mouse | 3 | ... |
| 5 | Keyboard | 3 | ... |
| 6 | Juice | 2 | ... |
| 7 | Mouse Cable| 4 | ... |
+---+------------+---+------+
员工表:
+------------+------+---------+-----------+
| EmployeeID | Name | Surname | Something |
+------------+------+---------+-----------+
订单表:
+---------+-------+------+-----------+
| OrderID | EmpID | Date | Something |
+---------+-------+------+-----------+
OrderDetails表:
+---------+-----------+----------+-------+------------+
| OrderID | ProductID | Quantity | Price | CategoryID |
+---------+-----------+----------+-------+------------+
我想获得特定员工特定类别及以上级别(参考类别至0级)的总价,如下所示
适用于雇员ID 10
+-----------+------------+--------------+---------------+
| EmployeeID| CategoryId | CategoryName | Total Prices |
| 10 | 7 | Mouse Cable | 3000 |
| 10 | 4 | Mouse | 5000 |
| 10 | 3 | Computer | 12000 |
| 10 | 1 | Elektronik | 35000 |
+-----------+------------+--------------+---------------+
我想创建一个查询,从特定的RefID开始,然后获取CategoryID,在下一步中,RefID将是CategoryID,并继续这样,直到RefID 0答案将很长,但下面的查询适合您
DECLARE @rowResult TABLE (
EmployeeID int,
CategoryID int,
Total int);
DECLARE @EmployeeID int;
DECLARE @CategoryID int;
DECLARE @RefID int;
SET @EmployeeID = 100;
SET @CategoryID = 7;
SELECT @RefID = RefID FROM CATEGORIES WHERE CategoryID = @CategoryID;
WHILE @RefID > 0
BEGIN
INSERT INTO @rowResult
SELECT e.EmployeeID, d.CategoryID, SUM(d.Quantity * d.Price) AS 'Total'
FROM Employees e
INNER JOIN Orders o ON o.EmpID = e.EmployeeID
INNER JOIN OrderDetails d ON d.OrderID = o.OrderID
WHERE e.EmployeeID = @EmployeeID AND d.CategoryID = @CategoryID
GROUP BY e.EmployeeID, d.CategoryID ;
SET @CategoryID = @RefID;
SELECT @RefID = RefID FROM CATEGORIES WHERE CategoryID = @CategoryID;
END
SELECT * FROM @rowResult
GO
运行代码如下
类别
雇员
订单详情
命令
您尝试的查询在哪里?欢迎使用Stack Overflow,@Elif A。请查看:请编辑您的问题,以包括您迄今为止开发的查询,以及它产生的输出有什么问题。我认为您希望获取类别总价,从起始类别ID到级别0可能重复的
CREATE TABLE CATEGORIES (
CategoryID int NOT NULL PRIMARY KEY,
CategoryName nvarchar(255),
RefID int,
Detail nvarchar(255)
);
CREATE TABLE EMPLOYEES (
EmployeeID int NOT NULL PRIMARY KEY,
Name nvarchar(255),
SurName nvarchar(255),
Detail nvarchar(255)
);
CREATE TABLE OrderDetails (
OrderID int,
ProductID int,
Quantity int,
Price int,
CategoryID int
);
CREATE TABLE Orders (
OrderID int,
EmpID int
);
ALTER TABLE CATEGORIES
ADD FOREIGN KEY (RefID) REFERENCES CATEGORIES(CategoryID);
GO