如何对一个表进行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以判断#的方法,可能需要一个查找表。