回答

收藏

使用SQL Server创建所有可能的组合

技术问答 技术问答 162 人阅读 | 0 人回复 | 2023-09-12

我在这里看到过类似的问题,但要么我没有得到答案,要么他们适用……这就是我所需要的,我认为这真的很简单:我有一组项目,每个项目都有一个子项目集。每个项目的子项目数量将发生变化。
( a, \3 I  \3 ^* N! Z- {Item 1   SubItem 1-1   SubItem 1-2   SubItem 1-3Item 2   SubItem 2-1Item 3   SubItem 3-1   SubItem 3-2对于一个非常具体的用途,我们希望为每个子项目的组合添加一个注释,并为每个子项目添加一个布尔属性,因此最终如下:
% y( C$ k! C$ z6 G; U4 _( NItem 1   Subitem 1-1 = True,Subitem 1-2 = True,Subitem 1-3 = TrueItem 1   Subitem 1-1 = True,Subitem 1-2 = True,Subitem 1-3 = FalseItem 1   Subitem 1-1 = True,Subitem 1-2 = False,Subitem 1-3 = TrueItem 1   Subitem 1-1 = True,Subitem 1-2 = False,Subitem 1-3 = FalseItem 1   Subitem 1-1 = False,Subitem 1-2 = True,Subitem 1-3 = True... (the rest of Item 1 possible combinations)Item 2   Subitem 2-1 = TrueItem 2   Subitem 2-1 = FalseItem 3   Subitem 3-1 = True,Subitem 3-2 = TrueItem 3   Subitem 3-1 = True,Subitem 3-2 = FalseItem 3   Subitem 3-1 = False,Subitem 3-2 = TrueItem 3   Subitem 3-1 = False,Subitem 3-2 = False我尝试了各种内部连接和交叉连接的猫,但它们不能正常工作。我认为布尔部分可以通过交叉连接添加到两行True和False在表中,我也认为我需要执行
. F" P- t0 @: \FOR XML子查询可以在一行中获得子项,但我没有得到子项目的组合
0 T, p$ c0 M" H. j# a# g这是我到目前为止的内容:
0 M' J9 ~( n! q9 S, ]-- Schema creation and data fillingDECLARE @Item TABLE (ItemId int,Name varchar(50))DECLARE @Item_SubItem TABLE (ItemId int,SubitemId int)DECLARE @SubItem TABLE (SubitemId int,Name varchar(50))INSERT INTO @Item values (1,'Item 1')INSERT INTO @Item values (2,'Item 2')INSERT INTO @Item values (3,'Item 3')INSERT INTO @SubItem values (1,'SubItem 1-1')INSERT INTO @SubItem values (2,'SubItem 1-2')INSERT INTO @SubItem values (3,'SubItem 1-3')INSERT INTO @SubItem values (4,'SubItem 2-1')INSERT INTO @SubItem values (5,'SubItem 3-1')INSERT INTO @SubItem values (6,'SubItem 3-2')INSERT INTO @Item_SubItem values (1,1)INSERT INTO @Item_SubItem values (1,2)INSERT INTO @Item_SubItem values (1,3)INSERT INTO @Item_SubItem values (2,4)INSERT INTO @Item_SubItem values (3,5)INSERT INTO @Item_SubItem values (3,6)select I.Name,SI.Name  from @Item I       inner join @Item_SubItem ISI on ISI.ItemId = I.ItemId       INNER JOIN @SubItem SI on SI.SubitemId = ISI.SubitemId order by I.Name,SI.Name-- Actual querySELECT ItemName = M.name,(SELECT iC.name   '='   CASE AuxCode WHEN 1 THEN 'True' WHEN 0 THEN 'False' END                               FROM Item_subitem AS iCGM                                        INNER JOIN Subitem AS iC ON iC.SubitemId = iCGM.SubitemId                                        CROSS JOIN (SELECT AuxCode = 1 UNION SELECT AuxCode = 0) Aux                                  WHERE iCGM.ItemId = M.ItemId                                  ORDER BY iC.name                                    FOR XML PATH FROM Item M所以,对我来说,失败的是子查询。我非常感谢任何帮助。!* G! G$ [, O0 z! X% A2 R9 r& q4 ?
                                                               
9 J0 R$ [, R1 c    解决方案:
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则