一个SQL 面试题
去年应聘一个职位未果,其间被考了一个看似简单的题,但我没有找到好的大案.
不知各位大虾有无好的解法?
题为:
有两个表, t1, t2,
Table t1:
SELLER | NON_SELLER
----- -----
A B
A C
A D
B A
B C
B D
C A
C B
C D
D A
D B
D C
Table t2:
SELLER | COUPON | BAL
----- --------- ---------
A 9 100
B 9 200
C 9 300
D 9 400
A 9.5 100
B 9.5 20
A 10 80
要求用SELECT 语句列出如下结果:------如A的SUM(BAL)为B,C,D的和,B的SUM(BAL)为A,C,D的和.......
且用的方法不要增加数据库负担,如用临时表等.
NON-SELLER| COUPON | SUM(BAL)
------- --------
A 9 900
B 9 800
C 9 700
D 9 600
A 9.5 20
B 9.5 100
C 9.5 120
D 9.5 120
A 10 0
B 10 80
C 10 80
D 10 80
题解:目的是要统计NON_SELLER的信息,题目的动机我不知道不过答案倒有。
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
创建环境/****** Object: Table [dbo].[t2] Script Date: 03/15/2011 09:37:19 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[t2](
[SELLER] [nvarchar](50) NULL,
[COUPON] [float] NULL,
[BAL] [int] NULL
) ON [PRIMARY]
GO
INSERT [dbo].[t2] ([SELLER], [COUPON], [BAL]) VALUES (N'A', 9, 100)
INSERT [dbo].[t2] ([SELLER], [COUPON], [BAL]) VALUES (N'B', 9, 200)
INSERT [dbo].[t2] ([SELLER], [COUPON], [BAL]) VALUES (N'C', 9, 300)
INSERT [dbo].[t2] ([SELLER], [COUPON], [BAL]) VALUES (N'D', 9, 400)
INSERT [dbo].[t2] ([SELLER], [COUPON], [BAL]) VALUES (N'A', 9.5, 100)
INSERT [dbo].[t2] ([SELLER], [COUPON], [BAL]) VALUES (N'B', 9.5, 20)
INSERT [dbo].[t2] ([SELLER], [COUPON], [BAL]) VALUES (N'A', 10, 80)
/****** Object: Table [dbo].[t1] Script Date: 03/15/2011 09:37:19 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[t1](
[SELLER] [nvarchar](50) NULL,
[NON_SELLER] [nvarchar](50) NULL
) ON [PRIMARY]
GO
INSERT [dbo].[t1] ([SELLER], [NON_SELLER]) VALUES (N'A', N'B')
INSERT [dbo].[t1] ([SELLER], [NON_SELLER]) VALUES (N'A', N'C')
INSERT [dbo].[t1] ([SELLER], [NON_SELLER]) VALUES (N'A', N'D')
INSERT [dbo].[t1] ([SELLER], [NON_SELLER]) VALUES (N'B', N'A')
INSERT [dbo].[t1] ([SELLER], [NON_SELLER]) VALUES (N'B', N'C')
INSERT [dbo].[t1] ([SELLER], [NON_SELLER]) VALUES (N'B', N'D')
INSERT [dbo].[t1] ([SELLER], [NON_SELLER]) VALUES (N'C', N'A')
INSERT [dbo].[t1] ([SELLER], [NON_SELLER]) VALUES (N'C', N'B')
INSERT [dbo].[t1] ([SELLER], [NON_SELLER]) VALUES (N'C', N'D')
INSERT [dbo].[t1] ([SELLER], [NON_SELLER]) VALUES (N'D', N'A')
INSERT [dbo].[t1] ([SELLER], [NON_SELLER]) VALUES (N'D', N'B')
INSERT [dbo].[t1] ([SELLER], [NON_SELLER]) VALUES (N'D', N'C')
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
答案select non_seller,coupon,sum([sum(BAL)])as [sum(BAL)] from
(
select
*
from
(
select t1.non_seller,t2.coupon as coupon,sum(BAL) as [sum(BAL)] from t1 join t2 on T1.SELLER=t2.SELLER group by non_seller,coupon
)x
union
select seller,coupon,0 from t2
) y
group by non_seller,coupon