/ / IF-ELIF-ELSE条件付きSQLの計算列 - sql、sql-server、if-statement、calculated-columns

IF-ELIF-ELSE条件付きSQLの計算列 - sql、sql-server、if-statement、calculated-columns

私はこの計算を計算する方法の助けが必要ですSQLコード内の列。私はフォーラムの初期に、列の追加に基づいて計算する方法、または標準値を与える方法を見てきました。しかし私の場合は、別の列の値に基づいて異なる事前設定値を表示できる列を追加したいと考えています。これは通常のIF-ELIF-ELSEステートメントと同じです。

私の場合、私はデータベース、テーブル、ログを持っていますユーザーの1人1人がシステム内で行うすべての変更。変更が行われるたびに、ユーザーの従業員番号がテーブルに記録され、従業員の名前ではなくログに記録されます。これらのログに戻すのに多くの時間を費やすため、雇用者番号が何であるかを調べるのに多くの時間を費やします私はすべての従業員番号とその対応する名前のリストを持っています。

私の基本的なSQLスキルは、インポート方法のみを教えてくれますテーブル/カラムを作成して作成しますが、IF文を使用すると完全に失われてしまいます。私は疑似コードを実行しているので、探しているものが分かるかもしれません。 A.Emp_Numは従業員番号を持つ列であり、Emp_Nameは内容として "null"を持つ作成済み列です。

SELECT A.EMP_NUM, A.COLUMN1, A.COLUMN2, "Null" AS EMP_NAME

FROM LOGGINGTABLE A

IF A.EMP_NUM=="1234" THEN EMP_NAME="MONICA"

ELIF A.EMP_NUM=="5678" THEN EMP_NAME="JOE"

回答:

回答№1は1

以下のように試してみてください

注意:EMP_NAMEとEMP_NUMとの間の関係を維持すると、将来的に有用になります。 従業員数がそれ以上の場合は、以下のような値をハードコーディングして、それらの間の関係を維持することはできません

SELECT CAST(
CASE
WHEN EMP_NUM =1234
THEN "MONICA"
WHEN  EMP_NUM =5678
then "JOE"
.
.
.
END AS nvarchar(1000)) as EMPNAME,EMP_NUM, COLUMN1, COLUMN2
FROM LOGGINGTABLE

または

SELECT
CASE
WHEN EMP_NUM =1234
THEN "MONICA"
WHEN  EMP_NUM =5678
then "JOE"
.
.
.
END as EMPNAME,EMP_NUM, COLUMN1, COLUMN2
FROM LOGGINGTABL

提案: テーブルにEMP_NAMEという名前の新しい列を追加し、その列にこれらの値を保存することをお勧めします。将来EMP_NUMを挿入するとEMP_NAMEも挿入すると維持しやすくなります


回答№2の場合は0

OMG、従業員表がありますか?ちょうどそれに参加する

SELECT A.EMP_NUM, A.COLUMN1, A.COLUMN2, E.EMP_NAME
FROM LOGGINGTABLE A
INNER JOIN EMPLOYEETABLE E on A.EMP_NUM = E.EMP_NUM

編集: あなたがユーザーにマップされていないエントリがあり、それらを見逃したくない場合

SELECT A.EMP_NUM, A.COLUMN1, A.COLUMN2, isnull(E.EMP_NAME,"No User Linked") as EMP_NAME
FROM LOGGINGTABLE A
LEFT OUTER JOIN EMPLOYEETABLE E on A.EMP_NUM = E.EMP_NUM

編集: テキストで文書化された従業員をテーブルに入れたい場合

BULK INSERT dbo.temp
FROM "c:tempfile.txt"
WITH
(
ROWTERMINATOR ="n"
)

その後、

Insert into EMPLOYEETABLE
select LEFT(column1, CHARINDEX(" ", column1+ " ") - 1),
RIGHT(column1, len(column1)-CHARINDEX(" ", column1+ " ") - 1)
from dbo.temp

それを改訂しなければならないかもしれません。