如何在SQLServer表中引入基于父id和子id组合的新列

如何在SQLServer表中引入基于父id和子id组合的新列,sql,sql-server,tsql,Sql,Sql Server,Tsql,条目id是唯一的,并且基于销售点编号。我想在收据中按父项和子项ID对订单的所有变体进行分组。使用下面的数据,我想介绍一个新的专栏,它允许我在SQL Management Studio中对父Id和子Id的独特组合进行分组 这是我的代码: SELECT [EntryId] ,[CheckNumber] ReceiptId ,[ParentId] ,[FKItemId] ChildId FROM POSITEMS 桌子 EntryId |

条目id是唯一的,并且基于销售点编号。我想在收据中按父项和子项ID对订单的所有变体进行分组。使用下面的数据,我想介绍一个新的专栏,它允许我在SQL Management Studio中对父Id和子Id的独特组合进行分组

这是我的代码:

SELECT
       [EntryId]
      ,[CheckNumber]  ReceiptId
      ,[ParentId]
      ,[FKItemId] ChildId
FROM POSITEMS 
桌子

EntryId |     ReceiptId |   ParentId       | ChildId      
1069869 |     10064     |      0000        | 3010    
1069870 |     10064     |      3010        | 20095     
1069899 |     10064     |      3010        | 20070   
1069914 |     10064     |      3010        | 20040       
1069929 |     10064     |      0000        | 3010     
1069930 |     10064     |      3010        | 20095   
1069952 |     10064     |      3010        | 20090   
1069967 |     10064     |      3010        | 20050 
星号表示我想从结果集中分组的两个唯一的父子id组合

EntryId |     ReceiptId |   ParentId       | ChildId, GroupedID        
1069869 |     10064     |      0000        | 3010   , 1 
1069870 |     10064     |      3010        | 20095  , 2     
1069899 |     10064     |      3010        | 20070  , 2 
1069914 |     10064     |      3010        | 20040  , 2     
1069929 |     10064     |      0000        | 3010   , 3  
1069930 |     10064     |      3010        | 20095  , 4 
1069952 |     10064     |      3010        | 20090  , 4  
1069967 |     10064     |      3010        | 20050  , 4

你可以用康卡特

select concat(parentId, '_', ChildId) from your_table;
你得到了0,3010

0_3010
这与下面的group by相同。注意:如果您保留了条目_id,那么您将始终重复您的父/子组合,因为它在表中是唯一的id

SELECT
      [CheckNumber]  ReceiptId
      ,[ParentId]
      ,ChildId
FROM POSITEMS 
GROUP BY
  [CheckNumber]
  ,ParentId
  ,ChildId

您能否提供一个所需输出的示例以及您可能已经尝试过的任何内容?如果您只想按唯一组合分组,您可以将两列添加到group by ParentId语句中,例如group by ParentId,ChidId,而不需要额外的列。我已在原始请求中添加了所需输出。ParentId,ChildId组合不是唯一的。一个人可以在一张收据上多次订购相同的组合。ParentId 3010是一种奶酪汉堡,里面有洋葱20095、蘑菇20070和生菜20040。这可能是一个两个孩子想要同一个汉堡的家庭。因此,EntryId是唯一允许我使组合唯一的另一列,但我如何使用它?@user6516027-根据您问题中提供的数据,您的预期结果是什么?我们假定您当前的select语句返回您提供的数据。你只是在寻找独特的?这不会给我独特的组合。例如,我需要通过引入唯一的组合ID对EntryID 106987010698991069914进行分组。这不会给我唯一的组合。例如,我需要通过引入唯一的组合ID对EntryID 106987010698991069914进行分组。这将为您提供您所要求的Receipt级别的父/子唯一组合。EntryId在数据集中是唯一的,看起来是主键。因此,您的结果将与它一起进行唯一分组。也许您应该发布您的模式和一个更精确的开始数据和所需结果的示例。因为所需的输出数据看起来更像起始数据集,所以结果集告诉我,我有一个ParentID 3010和5个child id。这不是我想要实现的。我想按照条目Id的顺序对每个父Id进行分组。在这种情况下,我需要看到父Id 3010被订购了两次,其子Id与之匹配。请再次编辑您的问题,因为我从您的示例数据中看到了什么,我希望有2个父Id 0和3010以及6个子Id。当您更新时,我很乐意进一步查看,但您的问题的所有3个答案都表明您的意图不清楚,因此您需要重试。我添加了一个列GroupedID,这需要计算,这就是我想要实现的,以便能够计算所有唯一的订单组合。
SELECT
      [CheckNumber]  ReceiptId
      ,[ParentId]
      ,ChildId
FROM POSITEMS 
GROUP BY
  [CheckNumber]
  ,ParentId
  ,ChildId