![見出し画像](https://assets.st-note.com/production/uploads/images/28633427/rectangle_large_type_2_881694d53d17299035d44a2a95b5d84f.png?width=1200)
tableauの小技集-カスタムクエリでSQLServerのWITH句はエラーになる-
SQLServerでのWITH句の書き方サンプル
やりたいことは指定した期間内で、社員の苗字が「田中」さんたちのの出勤時間が最も早い時間をそれぞれ調べることです。
WITH
A ( SELECT * FORM 社員マスタ WHERE 社員マスタ.姓 = '田中')
, B ( SELECT * FORM 社員出退勤履歴 WHERE 社員出退勤履歴.出勤日時 BTWEEN '2019-12-1' AND '2019-12-7')
SELECT
A.社員ID
,A.CONECT(A.姓,A.名) AS '姓名'
,MIN (B.出勤日時)AS '最短出勤日時'
FROM A
LEFT JOIN B ON B.社員ID = A.社員ID
GROUP BY A.社員ID,A.CONECT(A.姓,A.名)
SQLServer上では問題なくこのクエリは実行されますが、
tableaudesktopのカスタムクエリ上はWITH句が読み取ってくれない模様。
しかたなくセオリー通りに書きます。
SQLServerでサブクエリがあるときのの書き方サンプル
SELECT
A.社員ID
,A.CONECT(A.姓,A.名) AS '姓名'
,MIN (B.出勤日時)AS '最短出勤日時'
FROM
( SELECT * FORM 社員マスタ WHERE 社員マスタ.姓 = '田中') AS A
LEFT JOIN
( SELECT * FORM 社員出退勤履歴 WHERE 社員出退勤履歴.出勤日時 BTWEEN '2019-12-1' AND '2019-12-7') AS B
ON B.社員ID = A.社員ID
GROUP BY A.社員ID,A.CONECT(A.姓,A.名)
まとめ
WITH句は使いまわしたいと聞いは便利だし上から順番に処理が流れる書き方に慣れてる人はWITH句の方が読みやすいがtableau上でのカスタムクエリは動きません。