我有一個包含項目集代碼的表。每個代碼的組由group_id
定義。該表被定義如下:獲取N個值的有序集合的排列
CREATE TABLE item_code (
id int PRIMARY KEY NOT NULL IDENTITY (1,1),
item_id int DEFAULT NULL,
group_id int NOT NULL,
code varchar(50) NOT NULL
);
CREATE TABLE groups (
id int PRIMARY KEY NOT NULL IDENTITY (1,1),
name varchar(50) NOT NULL,
order int NOT NULL
)
對於表中的每個item_id
,我需要選擇1 code
從每個group_id
由組的order
排序。例如:
INSERT INTO groups (id, name, order) VALUES (1, 'one', 10), (2, 'two', 20), (3, 'three', 30);
INSERT INTO item_code (item_id, group_id, [code])
VALUES
(99, 1, 'code1-1'),
(99, 1, 'code1-2'),
(99, 2, 'code2-1'),
(99, 2, 'code2-2'),
(99, 3, 'code3-1'),
(100,1, 'another-code');
會導致集:
item_id code_combination
99 "code1-1"
99 "code1-2"
99 "code2-1"
99 "code2-2"
99 "code3-1"
99 "code1-1, code2-1"
99 "code1-1, code2-2"
99 "code1-2, code2-1"
99 "code1-2, code2-2"
99 "code1-1, code3-1"
99 "code1-2, code3-1"
99 "code2-1, code3-1"
99 "code2-2, code3-1"
99 "code1-1, code2-1, code3-1"
99 "code1-2, code2-1, code3-1"
99 "code1-1, code2-2, code3-1"
99 "code1-2, code2-2, code3-1"
100 "another-code"
實際結果的順序並不重要。我包含了一行item_id
== 100,以顯示所有item_id的結果應該包含在內。
什麼我迄今所做的: 我已經建立的CTE變得碼的組合,但它不尊重ITEM_ID,團體或命令而這也正是我堅持:
;WITH cte (combination, curr) AS (
SELECT CAST(ic.code AS VARCHAR(MAX)), ic.id
FROM items_code ic
UNION ALL
SELECT CAST(c.combination + ',' + CAST(ic.code AS VARCHAR(10)) AS VARCHAR(MAX)), ic.id
FROM item_code ic
INNER JOIN
cte c
ON (c.curr < ic.id)
)
SELECT combination FROM cte
更新:我有一個比我最初發布的更復雜的模式,並在this fiddle中構建了模式。這個想法是一樣的,只是「訂單」是在不同的表格上定義的。
我不明白你在做什麼,但是你沒有FK參考表,並且你在組表上使用了不太可能匹配項目的標識屬性表。 – scsimon