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.單號 = 單號)
留言
張貼留言