SQL Server 作業練習2(JOIN、子查詢)
第一題--找出缺勤者:
有一員工表.結構如下EmployeeID Name
------------------
1001 張三
1002 李四
1003 王五
另有一張員工出勤刷卡表
EmployeeID Date
----------------------
1001 2007/03/24
1002 2007/03/24
1003 2007/03/24
1001 2007/03/25
1002 2007/03/25
1001 2007/03/26
1003 2007/03/26
從上面可以看出..員工王五在2007/03/25沒有刷卡.李四在2007/03/26沒有刷卡.
所以我想得出如下的資訊:
EmployeeID Date
-----------------------
1003 2007/03/25
1002 2007/03/26
=======================================================
CREATE TABLE #員工
(
員工編號 VARCHAR(4),
姓名 NVARCHAR(10)
)
go
CREATE TABLE #出缺勤
(
員工編號 VARCHAR(4),
日期 DATE
)
go
INSERT INTO #員工 VALUES('1001','張三')
INSERT INTO #員工 VALUES('1002','李四')
INSERT INTO #員工 VALUES('1003','王五')
INSERT INTO #出缺勤 VALUES('1001','2007/03/24')
INSERT INTO #出缺勤 VALUES('1002','2007/03/24')
INSERT INTO #出缺勤 VALUES('1003','2007/03/24')
INSERT INTO #出缺勤 VALUES('1001','2007/03/25')
INSERT INTO #出缺勤 VALUES('1002','2007/03/25')
INSERT INTO #出缺勤 VALUES('1001','2007/03/26')
INSERT INTO #出缺勤 VALUES('1003','2007/03/26')
這題我用的思考方式是
1.先找出正常出缺勤表該有的樣子
2.找出不存在正常出缺勤表中的人,即該日沒有出現
我這個有瑕疵,正常日期的取得應該用別方式
如果某日為正常上班日,但所有員工都沒來打卡或打卡機壞了
那該日的出缺勤表為空,日期不存在
=======================================================
SELECT B.員工編號 AS EmployeeID
,CONVERT(VARCHAR(10),A.日期,111) AS Date
FROM (SELECT DISTINCT 日期 FROM #出缺勤) AS A
CROSS JOIN (SELECT 員工編號 FROM #員工) AS B
WHERE NOT EXISTS
(SELECT 員工編號,日期 FROM #出缺勤
WHERE A.日期 = 日期 AND B.員工編號 = 員工編號)
第二題--找出單號最大者:
KK001 1KK001 2
KK001 3
KK001 4
KK002 1
KK002 2
KK002 3
變成↓↓↓↓↓
KK001 4
KK002 3
=======================================================
CREATE TABLE #T1
(
單號 VARCHAR(5),
次數 INT,
內容 NVARCHAR(10)
)
INSERT INTO #T1 VALUES('aa001', 1, '測')
INSERT INTO #T1 VALUES('aa001', 2, '測試')
INSERT INTO #T1 VALUES('aa001', 3, '測試完')
INSERT INTO #T1 VALUES('aa001', 4, '測試完成')
INSERT INTO #T1 VALUES('aa002', 1, '實')
INSERT INTO #T1 VALUES('aa002', 2, '實驗')
INSERT INTO #T1 VALUES('aa002', 3, '實驗完')
INSERT INTO #T1 VALUES('aa002', 4, '實驗完成')
INSERT INTO #T1 VALUES('aa003', 1, '驗')
INSERT INTO #T1 VALUES('aa003', 2, '驗證')
INSERT INTO #T1 VALUES('aa003', 3, '驗證完')
這題還算簡單
1.找出最大筆
1.自已查自已
=======================================================
SELECT A.單號,A.內容 FROM #T1 AS A WHERE EXISTS (SELECT 單號,MAX(次數) AS 最大次數 FROM #T1 GROUP BY 單號 HAVING A.次數 = MAX(次數) AND A.單號 = 單號)

留言
張貼留言