回答

收藏

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

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

我在这里看到过类似的问题,但要么我没有得到答案,要么他们适用……这就是我所需要的,我认为这真的很简单:我有一组项目,每个项目都有一个子项目集。每个项目的子项目数量将发生变化。
/ i8 ]6 V7 G$ g5 IItem 1   SubItem 1-1   SubItem 1-2   SubItem 1-3Item 2   SubItem 2-1Item 3   SubItem 3-1   SubItem 3-2对于一个非常具体的用途,我们希望为每个子项目的组合添加一个注释,并为每个子项目添加一个布尔属性,因此最终如下:; Q. X8 f! O9 Q2 N+ m- i. D5 A3 d
Item 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在表中,我也认为我需要执行: b6 W/ C" r9 T) _3 ]% f' x2 C
FOR XML子查询可以在一行中获得子项,但我没有得到子项目的组合
4 ^. d1 P' X; @这是我到目前为止的内容:$ g' @5 ^7 j! K$ n1 h- L# l9 l
-- 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所以,对我来说,失败的是子查询。我非常感谢任何帮助。!  Z) \* W+ t2 A# C3 K
                                                                6 t1 h5 q1 I3 Z
    解决方案:
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则