Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 级别-子级别类型表的SQL表架构_Mysql_Sql - Fatal编程技术网

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