投稿者 魔界の仮面弁士  (社会人) 投稿日時 2017/2/17 10:34:18
> ・テーブル名:Aテーブル
> ID:nchar(6)
> 実施日:nchar(10)
> 業務内容:nvarchar(20)
主キーはどれとどれの組み合わせですか?


> ★以下のようにIDのグループ単位で「訪問」が含まれるIDと「訪問」が含まれないIDを取得したい。
「訪問」限定なら、結果に業務内容の列は不要な気が。


> SQL文でどのよに書けば良いかご教示頂けますと大変たすかります。

【案1】

WITH
  [ID_LIST] AS (SELECT DISTINCT [ID] FROM [Aテーブル]),
  [DT_LIST] AS (SELECT [ID], [実施日] /*, [業務内容] */ FROM [Aテーブル] WHERE [業務内容] = N'訪問')
SELECT
  [ID_LIST].[ID], [実施日] /* , [業務内容] */
FROM
  [ID_LIST] LEFT JOIN [DT_LIST] ON [ID_LIST].[ID] = [DT_LIST].[ID]
ORDER BY
  [ID_LIST].[ID]



【案2】

SELECT
  [ID]
, MAX(CASE [業務内容] WHEN N'訪問' THEN [実施日] END) AS [実施日]
--, MAX(CASE [業務内容] WHEN N'訪問' THEN [業務内容] END) AS [業務内容]
FROM
  [Aテーブル]
GROUP BY
  [ID]
ORDER BY
  [ID]



なお上記案は、元データに
 INSERT INTO [Aテーブル] VALUES (N'27-001', N'2016/04/07', N'訪問')
が追加された場合、両者の結果が異なることに注意して下さい。