【问题标题】:Join 2 other tables with SQL? [closed]用 SQL 连接另外 2 个表? [关闭]
【发布时间】:2013-07-24 10:01:44
【问题描述】:

我有一个带有数据的表变量@table

Id Name   Count ParentId
4  Test4  2     1
5  Test5  3     1
6  Test6  2     2
7  Test7  4     2

还有一个带有数据的表变量@table1

Id Name   ParentId
1  Test1  0
2  Test2  0
3  Test3  0
4  Test4  1
5  Test5  1
6  Test6  2
7  Test7  2
8  Test8  3

我想将顶部的 2 个表连接到一个新表变量,因为 @table2 Count 的数据列 equal Count@table 与相同的 ParentId 的总和。这是连接 2 个表后的 @table2 数据:

Id Name  Count ParentId
1  Test1 5     0
2  Test2 6     0
3  Test3 0     0
4  Test4 2     1
5  Test5 3     1
6  Test6 2     2
7  Test7 4     2
8  Test8 0     3

【问题讨论】:

  • 你试过什么。你至少搜索过吗?您只需告诉我们您想要什么,而不告诉我们您尝试了什么……
  • 我尝试搜索。您可以为我的问题添加参考链接吗?
  • 您能否再解释一下@table2的输出。我不明白您如何达到计数值;为什么 Test1 5 和 Test2 6?
  • @jpw Count's Test1 = Count's Test4 + Count's Test5。因为它们具有相同的 ParentId = 1
  • count 列呢?从哪里到结果表?

标签: sql join tree sum


【解决方案1】:

试试这个

DECLARE @Table TABLE 
    ([Id] int, [Name] varchar(5), [Count] int, [ParentId] int)

INSERT INTO @Table([Id], [Name], [Count], [ParentId])
VALUES
    (4, 'Test4', 2, 1),
    (5, 'Test5', 3, 1),
    (6, 'Test6', 2, 2),
    (7, 'Test7', 4, 2)

DECLARE @Table1 TABLE ([Id] int, [Name] varchar(5), [ParentId] int)

INSERT INTO @Table1
    ([Id], [Name], [ParentId])
VALUES
    (1, 'Test1', 0),
    (2, 'Test2', 0),
    (3, 'Test3', 0),
    (4, 'Test4', 1),
    (5, 'Test5', 1),
    (6, 'Test6', 2),
    (7, 'Test7', 2),
    (8, 'Test8', 3)

SELECT [Id]
    ,[Name]
    ,SUM([Count]) AS [Count]
    ,[ParentId]
FROM
(
    SELECT T1.[Id]
    , T1.[Name]
    , T1.[ParentId]
    ,ISNULL(CASE WHEN T.[Count] IS NULL 
            THEN (SELECT [Count] FROM @Table TT WHERE TT.Id = T1.ID) 
            ELSE T.[Count] END,0) AS [Count]
    FROM @Table1 T1
    LEFT JOIN @Table T ON T1.[id] = T.[ParentId]
) T
GROUP BY [Id]
, [Name]
, [ParentId]

【讨论】:

    【解决方案2】:

    试试这个

    INSERT INTO @table2
    SELECT A.Id,
           ISNULL(A.Name,B.Name) AS Name,
           (SELECT COUNT(*) 
            FROM @table A1 LEFT OUTER JOIN @table1 B1 ON A1.Id = B1.id  
            WHERE ISNULL(A1.ParentId,B1.ParentId)= ISNULL(A.ParentId,B.ParentId)) AS count,
            ISNULL(A.ParentId,B.ParentId) AS ParentID
    FROM @table A LEFT OUTER JOIN @table1 B 
        ON A.Id = B.id
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-19
      • 2019-10-25
      • 1970-01-01
      相关资源
      最近更新 更多