2017-08-18 8 views
1

ハイアールリカルカテゴリリストを与える4つのテーブルを作成しました。 Like Categoriesテーブル。レベル-Sublevel型テーブルのSQLテーブルスキーマ

+----+--------------+---------------+----------------+ 
| ID | CategoryName | Ref. Category | Something else | 
+----+--------------+---------------+----------------+ 

Ref。カテゴリ(列1へのリンク)

例として、

+---+------------+---+------+ 
| 1 | Elektronik | 0 | ... | 
| 2 | Drink  | 0 | ... | 
| 3 | Computer | 1 | ... | 
| 4 | Mouse  | 3 | ... | 
| 5 | Keyboard | 3 | ... | 
| 6 | Juice  | 2 | ... | 
| 7 | Mouse Cable| 4 | ... | 
+---+------------+---+------+ 

Employeesテーブル:

+------------+------+---------+-----------+ 
| EmployeeID | Name | Surname | Something | 
+------------+------+---------+-----------+ 

Ordersテーブル:

+---------+-------+------+-----------+ 
| OrderID | EmpID | Date | Something | 
+---------+-------+------+-----------+ 

たOrderDetailsテーブル:

+---------+-----------+----------+-------+------------+ 
| OrderID | ProductID | Quantity | Price | CategoryID | 
+---------+-----------+----------+-------+------------+ 

は、私は特定の従業員の合計価格は特定のカテゴリを取得したいと上のレベルを上回るels(Ref。 0レベルまでのカテゴリー)合計価格社員10

+-----------+------------+--------------+---------------+ 
| EmployeeID| CategoryId | CategoryName | Total Prices | 
| 10  | 7  | Mouse Cable | 3000   | 
| 10  | 4  | Mouse  | 5000   | 
| 10  | 3  | Computer  | 12000   | 
| 10  | 1  | Elektronik | 35000   | 
+-----------+------------+--------------+---------------+ 

ため ように私は、クエリを作成したいとは、特定のREFIDで始まり、その後、区分を取り、次のステップでは、REFIDは区分され、最大でそのように続けます0

+1

あなたがしようとしたクエリがありますか? – Noob

+1

Stack Overflow、@Elif A.ようこそ:https://stackoverflow.com/help/how-to-ask質問を編集して、これまでに作成したクエリと出力に何が問題になっているかを入力してくださいそれは生産しています。 – Degan

+0

CategoryIDからレベル0までカテゴリの合計価格を取得したいと考えています –

答えて

1

回答が長くなりますREFIDが、クエリがあなた

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 
1

Runnnigコードのために働くの下には、 http://rextester.com/VSNF73112

012を下回っています

CATEGORIES

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) 
); 

たOrderDetails

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 
関連する問題