【问题标题】:How to Sql Join on one table contains same values in a column如何在一个表上进行 Sql Join 在一列中包含相同的值
【发布时间】:2014-04-02 05:02:18
【问题描述】:
P_Id    Catid   Score   ArtId   PostId  PhaseId UserId  Deleted ModDate
26      1       20      57      5       18      8       0       2014-03-29
27      2       18      57      5       18      8       0       2014-03-29
28      3       7       57      5       18      8       0       2014-03-29
29      4       5       57      5       18      8       0       2014-03-29
30      5       20      57      5       18      8       0       2014-03-29
31      1       12      57      1       18      9       0       2014-03-29
32      2       15      57      1       18      9       0       2014-03-29
33      3       15      57      1       18      9       0       2014-03-29
34      4       15      57      1       18      9       0       2014-03-29
35      5       19      57      1       18      9       0       2014-03-29

我想要这样的结果...

Catid            Judge1       Judge2  
1                   20          12
2                   18          15
3                    7          15
4                    5          15
5                   20          19    

【问题讨论】:

    标签: sql sql-server-2008 join


    【解决方案1】:

    您不需要任何连接来执行此操作,可以使用CASEstatements 和聚合函数来完成。

    SQL Fiddle

    MS SQL Server 2012 架构设置

    CREATE TABLE Table1
        ([P_Id] int, [Catid] int, [Score] int, [ArtId] int, [PostId] int, [PhaseId] int, [UserId] int, [Deleted] int, [ModDate] varchar(10))
    ;
    
    INSERT INTO Table1
        ([P_Id], [Catid], [Score], [ArtId], [PostId], [PhaseId], [UserId], [Deleted], [ModDate])
    VALUES
        (26, 1, 20, 57, 5, 18, 8, 0, '2014-03-29'),
        (27, 2, 18, 57, 5, 18, 8, 0, '2014-03-29'),
        (28, 3, 7, 57, 5, 18, 8, 0, '2014-03-29'),
        (29, 4, 5, 57, 5, 18, 8, 0, '2014-03-29'),
        (30, 5, 20, 57, 5, 18, 8, 0, '2014-03-29'),
        (31, 1, 12, 57, 1, 18, 9, 0, '2014-03-29'),
        (32, 2, 15, 57, 1, 18, 9, 0, '2014-03-29'),
        (33, 3, 15, 57, 1, 18, 9, 0, '2014-03-29'),
        (34, 4, 15, 57, 1, 18, 9, 0, '2014-03-29'),
        (35, 5, 19, 57, 1, 18, 9, 0, '2014-03-29')
    ;
    

    查询 1

    SELECT
      Catid,
      SUM(CASE WHEN userid = 8 THEN score ELSE 0 END) AS Judge1,
      SUM(CASE WHEN userid = 9 THEN score ELSE 0 END) AS Judge2
    FROM table1
    GROUP BY catid
    

    Results

    | CATID | JUDGE1 | JUDGE2 |
    |-------|--------|--------|
    |     1 |     20 |     12 |
    |     2 |     18 |     15 |
    |     3 |      7 |     15 |
    |     4 |      5 |     15 |
    |     5 |     20 |     19 |
    

    【讨论】:

    • 谢谢这是运行...但是当法官是多个时,结果会是什么???意味着当我们不知道舞台上有多少评委时,我们会做什么???在此先感谢...
    • @user3487809 由于这些值是硬编码的,因此您必须为其他法官添加额外的案例陈述。如果你需要一个动态的解决方案,你需要一些映射用户ID的方法来判断#,也许是一个查找表。
    【解决方案2】:
    select a.catid,a.score,b.score from
    (select * from Table1 where userid = 8) a inner join 
    (select * from Table1 where userid = 9) b on a.Catid = b.Catid 
    

    【讨论】:

      猜你喜欢
      • 2013-06-02
      • 1970-01-01
      • 1970-01-01
      • 2022-11-10
      • 2019-12-24
      • 1970-01-01
      • 2023-03-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多