
SQLのSelect文である期間を日別に出力したいのですが、どのようにすればいいのでしょうか
テーブルのデータは期間全部が入っているのではなく。
データが存在しない日もあります。
データが存在しない日は日にちをのぞいて空白になるようにしたいです。
例として、
テーブル上のデータ
2013-08-01 ああああ
2013-08-03 いいいい
2013-08-06 うううう
出力したいデータ 期間2013-08-01~2013-08-10
2013-08-01 ああああ
2013-08-02
2013-08-03 いいいい
2013-08-04
2013-08-05
2013-08-06 うううう
2013-08-07
2013-08-08
2013-08-09
2013-08-10
上記のような形で出力したいのですが、
どのようにすればいいのでしょうか
http://bitstar.jp/blog/?p=2468
のように別のテーブルを用意する以外のやり方でお願いします。
よろしくお願いいたします。
No.3ベストアンサー
- 回答日時:
--こんにちは。
--以下のSQLで実現可能です。SQL ServerでSQLの検証を行いました。
SELECT TBL_A.年月日
,ISNULL(TBL_B.データ,'') AS データ
FROM(
SELECT '2013-08-01' AS 年月日
UNION ALL
SELECT '2013-08-02' AS 年月日
UNION ALL
SELECT '2013-08-03' AS 年月日
UNION ALL
SELECT '2013-08-04' AS 年月日
UNION ALL
SELECT '2013-08-05' AS 年月日
UNION ALL
SELECT '2013-08-06' AS 年月日
UNION ALL
SELECT '2013-08-07' AS 年月日
UNION ALL
SELECT '2013-08-08' AS 年月日
UNION ALL
SELECT '2013-08-09' AS 年月日
UNION ALL
SELECT '2013-08-10' AS 年月日
) AS TBL_A
LEFT OUTER JOIN TBL_B
ON TBL_A.年月日=TBL_B.年月日
--TBL_A:日付を管理するテーブル
--TBL_B:日付と対になっているデータが登録されているテーブル
No.5
- 回答日時:
こんにちは。
方法として2つの案を準備しました。
まずは下記のSQLを実行して質問に書いてあるテストデータを準備します。
-- #### テーブル作成
CREATE TABLE dbo.TestData
(
LogDate date
, Data1 nvarchar(10)
)
GO
-- #### テストデータ登録
INSERT INTO dbo.TestData
SELECT '2013-08-01', N'ああああ' UNION ALL
SELECT '2013-08-03', N'いいいい' UNION ALL
SELECT '2013-08-06', N'うううう'
GO
-- ################################################
-- #### 方法1:毎回日付テーブルを作成する。
-- #### 短所があり、パフォーマンス的に悪いです。
-- ################################################
DECLARE @StartDate datetime, @EndDate datetime
SET @StartDate = '2013-08-01'
SET @EndDate = '2013-08-10'
DROP TABLE #TempDate
CREATE TABLE #TempDate
(
ComDay date
)
DECLARE @i int
SET @i = 0
WHILE (@i <= DATEDIFF(DD, @StartDate, @EndDate))
BEGIN
INSERT INTO #TempDate (ComDay)
VALUES (DATEADD(DD, @i, @StartDate))
SET @i = @i + 1
END
SELECT A.ComDay, ISNULL(B.Data1, '') Data1
FROM #TempDate A LEFT OUTER JOIN dbo.TestData B
ON A.ComDay = B.LogDate
ORDER BY A.ComDay
-- ################################################
-- #### 方法2:日付テーブルdbo.tComDayを作成しておいて使う。
-- #### おすすめする。
-- ################################################
SELECT A.ComDay, ISNULL(B.Data1, '') Data1
FROM dbo.tComDay A LEFT OUTER JOIN dbo.TestData B
ON A.ComDay = B.LogDate
WHERE A.ComDay BETWEEN @StartDate AND @EndDate
ORDER BY A.ComDay
上記の方法1と方法2の実行結果
ComDayData1
2013-08-01ああああ
2013-08-02
2013-08-03いいいい
2013-08-04
2013-08-05
2013-08-06うううう
2013-08-07
2013-08-08
2013-08-09
2013-08-10
No.4
- 回答日時:
プロシージャを使っていいならば、プロシージャ側にパラメータ送って
プロシージャ内で再帰させてカレンダーデータを戻すという案はどうでしょうか?
バックアップファイルに入ってるのでサンプル載せられませんが
googleでもyahooでも検索すればいくつかのサンプルが掲載されていますよ。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Oracle 質問です。 下記のテーブルとデータがあり、 取得想定結果のように出力したいです。 下記のsqlだと0 2 2023/05/23 19:10
- システム 帳票出力を行う単体テストのテストデータが作成できません 2 2023/08/26 21:26
- IT・エンジニアリング 帳票出力を行う単体テストのテストデータが作成できません 2 2023/08/26 21:25
- MySQL 複数DBテーブルからのデータ取得 3 2022/05/17 15:02
- その他(データベース) pythonでsqlight勉強中、クエリー結果の利用法教えて下さい 1 2022/04/28 20:38
- Ruby pandasでsqlite3にテーブル作成・追加・読み出しでindexの取り扱い方教えてください 5 2023/03/08 09:57
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- PostgreSQL 列が存在しないと言われる 2 2023/02/10 18:33
- Oracle sqlで質問です。 idを元にidに紐付くデータで住所コードがjpのみのデータ以外のidを取得したい 4 2023/03/20 17:41
- その他(データベース) IT用語について質問です。 以前ITパスポートの試験を受けた際にデータベースが何の集まりかについての 2 2022/12/10 12:29
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【SQL】他テーブルに含まれる値...
-
SQLで、Join句で結合したテ...
-
既存データをINSERT文にして出...
-
重複データの一方を削除するSQL...
-
別テーブルを参照し、その内容...
-
ExcelのMatch関数のようなもの...
-
テーブル名が可変の場合のクエ...
-
ACCESSのVBAにてExcelに行...
-
Accessの構成をコピーしたい
-
SQLServerからMDBへのデータバ...
-
ACCESS クエリーでソートの不具合
-
2008年12月現在の日本語対応のM...
-
異なるテーブルの値を比較テー...
-
2つのテーブルをLIKE演算子のよ...
-
結合したテーブルをSUMしたい
-
改行を含んだデータのインポート
-
H2 DataBaseご存知の方教えて...
-
SQLサーバに対するSQL文で抽出...
-
不動産検索サイトのテーブル構成
-
フラグをたてるってどういうこ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【SQL】他テーブルに含まれる値...
-
既存データをINSERT文にして出...
-
SQLで、Join句で結合したテ...
-
Accessの構成をコピーしたい
-
SQLサーバに対するSQL文で抽出...
-
テーブル名が可変の場合のクエ...
-
副問合せを使わずにUNIONと同様...
-
同一テーブル内での比較(最新...
-
PRIMARY KEYのコピー
-
2つのテーブルをLIKE演算子のよ...
-
結合したテーブルをSUMしたい
-
ExcelのMatch関数のようなもの...
-
ACCESSのVBAにてExcelに行...
-
DB2のSQLコマンドについて
-
データ無し時は空白行にしたい...
-
ADO+ODBCでテーブルに接続する...
-
ACCESS クエリーでソートの不具合
-
改行を含んだデータのインポート
-
複数のテーブルからデータを取...
-
ExcelのVLOOKUP関数の動作をMyS...
おすすめ情報