多表关联汇总在MS SQL和ACCESS中的写法

原创 2007年03月08日 11:44:00

--多表关联汇总在MS SQL和ACCESS中的写法


--MS SQL
--建立測試環境
Create Table WS_Employee
(
ID Int,
NAME Varchar(10)
)
Insert Into WS_Employee
Select 1,'a' Union All
Select 2,'b' Union All
Select 3,'c' Union All
Select 4,'d' Union All
Select 5,'e' Union All
Select 6,'f'
Create Table WS_jjgz
(
ID Int,
员工ID Int,
price Int
)
Insert Into WS_jjgz
Select 1,1,125 Union All
Select 2,2,122 Union All
Select 3,3,111 Union All
Select 4,1,212 Union All
Select 5,1,111 Union All
Select 6,2,121
Create Table WS_jsgz
(
ID Int,
员工ID Int,
price Int
)
Insert Into WS_jsgz
Select 1,1,125 Union All
Select 2,2,122 Union All
Select 3,3,111 Union All
Select 4,1,212 Union All
Select 5,1,111 Union All
Select 6,2,121
GO
--測試
Select
 ID,
 NAME,
 IsNull(B.price,0) As 计件总工资,
 IsNull(C.price,0) As 计时总工资,
 IsNull(B.price,0) + IsNull(C.price,0) As 总工资
From
 WS_Employee A
Left Join
 (Select 员工ID, SUM(price) As price From WS_jjgz Group By 员工ID) B
On A.ID = B.员工ID
Left Join
 (Select 员工ID, SUM(price) As price From WS_jsgz Group By 员工ID) C
On A.ID = C.员工ID
--刪除測試環境
Drop table WS_Employee, WS_jjgz, WS_jsgz
--結果
/*
ID NAME 计件总工资 计时总工资 总工资
1 a  448   448   896
2 b  243   243   486
3 c  111   111   222
4 d  0   0   0
5 e  0   0   0
6 f  0   0   0
*/


--ACCESS
/*
SELECT
 ID,
 NAME,
 IIF(IsNull(B.SUMprice), 0, B.SUMprice) AS 计件总工资,
 IIF(IsNull(C.SUMprice), 0, C.SUMprice) AS 计时总工资,
 IIF(IsNull(B.SUMprice), 0, B.SUMprice) + IIF(IsNull(C.SUMprice), 0, C.SUMprice) AS 总工资
FROM
 (WS_Employee AS A
 LEFT JOIN [Select 员工ID, SUM(price) As SUMprice From WS_jjgz Group By 员工ID]. AS B ON A.ID = B.员工ID)
 LEFT JOIN [Select 员工ID, SUM(price) As SUMprice From WS_jsgz Group By 员工ID]. AS C ON A.ID = C.员工ID;
*/

/*
注意的地方
1. MS SQL中的IsNull在ACCESS中用IIF代替,ACCESS中的IsNull只是用來判斷是否為Null
2. ACCESS中多個JOIN,前一個JOIN的子句要用"()"括起來
3. ACCESS會自動給子查詢前後加上"[]",這時候"]"後面的"."不能刪除,否則會報錯
*/ 

SQL多表连接查询、多表关联

  • 2011年08月24日 12:56
  • 63KB
  • 下载

MS sql 判断数据库、表、函数、存储过程是否存在

-- 库是否存在 if exists(select * from master..sysdatabases where name=N'库名') print 'exists' else print 'n...

MySQL SQL多表关联查询最佳实例

  • 2016年12月07日 13:26
  • 537KB
  • 下载

[MS SQL]Cursor实例讲解2-对某个DB中所有的表删除指定字段

当我们对某个DB中所有表加上一个字段后,现在发现其实并不需要这个字段,那么我们再次用循环将此字段删除。 一、删除某个字段的SQL语句 ALTER TABLE tablename DROP...
  • yaer123
  • yaer123
  • 2014年01月13日 15:18
  • 395

MS SQL表分区(文件组)

定义:表分区其实就是将一个大表分成若干个小表。 表分区可以从物理上将一个大表分成几个小表,但是逻辑上还是一个表。所以当执行插入、更新等操作的时候,不需要我们去判断应该插入或更新到哪个表中。只需要插入大...

C#实现GRID字段别名显示,利用MS SQL数据库表及字段描述

大家看到现有的大多数ERP系统向用户展示的都是中文的字段名,如果维护过ERP就会发现后台的数据库里面用的都是英文字段名的,这时就需要一个字段名别名转换处理,我有想过用[字段名 AS 别名]的方法不过我...

ms sql 2005 2008 通用表分页存储过程

USE [LevcnBase] GO /****** Object: StoredProcedure [dbo].[Paging] Script Date: 11/09/2011 18:10:...

MS SQL 2005基本操作(一):SQL语句对表、视图、索引和同义词的操作

1. 创建表Use db_ProductMngCreat table t_ProductInfo(ProductCode varchar(10) Not Null,DeptNo varchar(3) ...

MS SQL数据库表设计辅助

  • 2015年11月28日 00:51
  • 368KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:多表关联汇总在MS SQL和ACCESS中的写法
举报原因:
原因补充:

(最多只允许输入30个字)