質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

Q&A

解決済

3回答

1404閲覧

SQL 同じことを何度も書く場合のより良い書き方

tokita.

総合スコア61

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

0グッド

0クリップ

投稿2021/06/17 06:24

今、次のようなSQL文を使っています。

SQL

1select 仕事番号, 原価, CONVERT(DATETIME,CAST(year(原価計上日) as varchar)+'/'+CAST(month(原価計上日) as varchar)+'/1') AS 年月 2 from 原価明細 3 group by 仕事番号, CONVERT(DATETIME,CAST(year(原価計上日) as varchar)+'/'+CAST(month(原価計上日) as varchar)+'/1') 4 order by 仕事番号, CONVERT(DATETIME,CAST(year(原価計上日) as varchar)+'/'+CAST(month(原価計上日) as varchar)+'/1')

原価計上日を月に変換するための長い同じ文を3回かいており、保守上好ましくないです。
DBの設計に関する権限はないので、原価明細テーブルに年月フィールドを用意する事はできないです。

保守性を上げるためにはどのような書き方がより良いでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

一段下げる

sql

1select X.仕事番号, X.原価, X.年月 2from ( 3 select 仕事番号, 原価, CONVERT(DATETIME,CAST(year(原価計上日) as varchar)+'/'+CAST(month(原価計上日) as varchar)+'/1') AS 年月 4 from 原価明細 5) as X 6group by X.仕事番号, X.年月 7order by X.仕事番号, X.年月

投稿2021/06/17 06:59

sousuke

総合スコア3828

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tokita.

2021/06/22 05:54

ご回答ありがとうございました。こちらで当初の目的達成できました。
guest

0

ネストさせるに、一票ですが、そもそもの記述を簡潔にする事も考えた方が良いと思います。
それから、order byはselectの後に評価されるので、エイリアスでの指定が可能です。

SQL

1select 仕事番号, 原価, Format(原価計上日, 'yyyy/MM') AS 年月 2from 原価明細 3group by 仕事番号, 原価, Format(原価計上日, 'yyyy/MM') 4order by 仕事番号, 原価, 年月

年月を日付型にしたい場合でも、以下の様に記述できます。

select 仕事番号, 原価, CONVERT(Date, Format(原価計上日, 'yyyy/MM/1')) AS 年月 from 原価明細 group by 仕事番号, 原価, Format(原価計上日, 'yyyy/MM/1') order by 仕事番号, 原価, 年月

投稿2021/06/17 13:05

sazi

総合スコア25195

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tokita.

2021/06/22 05:55

いつもありがとうございます。 こちらの方法を使うことでより見やすい文にすることができました。 今後速度面なども考慮し、此方の方法を使ったり、sousuke様の方法と併せて使う等検討していきます。
guest

0

SQL Serverなら計算列(Computed Column)でテーブルを拡張しておけばよいのでは?
もしくはビューを作っておくとかですかね。

投稿2021/06/17 06:45

yambejp

総合スコア114843

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sousuke

2021/06/17 06:53

DBの設計に権限なかったらadd columnできないような?
yambejp

2021/06/17 06:56

それは回答者には判断できません できなければ、「できないので別の策で」と聞いてくるでしょう
sousuke

2021/06/17 07:03

質問に「原価明細テーブルに年月フィールドを用意する事はできない」とあるので 「新規データ列を追加できないが計算列は追加できる」という権限を聞いたことはなかったので。
tokita.

2021/06/22 05:54

ご回答ありがとうございました。 ただsousuke様ご指摘の通り、テーブル拡張は難しいです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問