Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何对一个表进行Sql联接,该表在列中包含相同的值_Sql_Sql Server 2008_Join - Fatal编程技术网

如何对一个表进行Sql联接,该表在列中包含相同的值

如何对一个表进行Sql联接,该表在列中包含相同的值,sql,sql-server-2008,join,Sql,Sql Server 2008,Join,我想要这样的结果 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

我想要这样的结果

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

这样做不需要任何连接,可以使用
CASE
语句和聚合函数来完成

MS SQL Server 2012架构设置

Catid            Judge1       Judge2  
1                   20          12
2                   18          15
3                    7          15
4                    5          15
5                   20          19    
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')
;
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
查询1

Catid            Judge1       Judge2  
1                   20          12
2                   18          15
3                    7          15
4                    5          15
5                   20          19    
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')
;
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

Catid            Judge1       Judge2  
1                   20          12
2                   18          15
3                    7          15
4                    5          15
5                   20          19    
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')
;
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

这样做不需要任何连接,可以使用
CASE
语句和聚合函数来完成

MS SQL Server 2012架构设置

Catid            Judge1       Judge2  
1                   20          12
2                   18          15
3                    7          15
4                    5          15
5                   20          19    
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')
;
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
查询1

Catid            Judge1       Judge2  
1                   20          12
2                   18          15
3                    7          15
4                    5          15
5                   20          19    
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')
;
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

Catid            Judge1       Judge2  
1                   20          12
2                   18          15
3                    7          15
4                    5          15
5                   20          19    
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')
;
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

谢谢,这是跑步。。。但当法官是多重的,那么结果会是什么呢???意思是当我们不知道有多少评委在台上时,我们会怎么做???提前感谢…@user3487809因为这些值是硬编码的,所以您必须为其他法官添加额外的案件陈述。如果你需要一个动态的解决方案,你需要一些映射用户ID的方法来判断#,也许是一个查找表。谢谢,这是运行。。。但当法官是多重的,那么结果会是什么呢???意思是当我们不知道有多少评委在台上时,我们会怎么做???提前感谢…@user3487809因为这些值是硬编码的,所以您必须为其他法官添加额外的案件陈述。如果您需要一个动态解决方案,您需要某种映射userid以判断#的方法,可能需要一个查找表。