/ / Obliczona kolumna w SQL z warunkiem IF-ELIF-ELSE - sql, sql-server, if-statement, kolumny obliczeniowe

Obliczona kolumna w SQL z warunkiem IF-ELIF-ELSE - sql, sql-server, if-statement, kolumny-obliczenia

Potrzebuję pomocy, jak to obliczyćkolumna w kodzie SQL. Widziałem wcześniej na forum, w jaki sposób obliczyć na podstawie sumowania kolumn lub po prostu podając standardową wartość. Ale w moim przypadku chciałbym dodać kolumnę, która może pokazywać różne wstępnie ustawione wartości na podstawie wartości innej kolumny. Jest to podobne do normalnego stwierdzenia IF-ELIF-ELSE.

W moim przypadku mam bazę danych, tabelę, która logujekażda zmiana, jaką robi jeden z użytkowników w systemie. Ilekroć wprowadzana jest zmiana, numer pracownika użytkownika jest rejestrowany w tabeli, a nie w imieniu pracownika. Ponieważ spędzamy dużo czasu wracając do tych dzienników, spędzamy dużo czasu sprawdzając, który numer pracodawcy należy do kogo: chciałbym, aby to było wykonane bezpośrednio w zapytaniu, mam listę wszystkich numerów pracowników i ich odpowiednich nazw.

Moje podstawowe umiejętności SQL mówią mi tylko, jak importowaćtable / columns i stwórz jeden, ale z instrukcją IF jestem kompletnie zagubiony, poniżej wykonałem pseudokod kodu, abyś mógł zrozumieć, czego szukam. A.Emp_Num jest kolumną z numerami pracowników i Emp_Name utworzoną kolumną z "null" jako treścią.

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"

Odpowiedzi:

1 dla odpowiedzi № 1

Spróbuj czegoś jak poniżej

Uwaga: Zachowaj relację między EMP_NAME i EMP_NUM w przyszłości, będzie to przydatne. jeśli liczba pracowników jest większa, to nie możemy tak mocno zakodować wartości jak poniżej, aby zachować relację między nimi

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

LUB

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

Sugestia: Proponuję dodać nową kolumnę o nazwie EMP_NAME do tabeli, a następnie zapisz te wartości w tej kolumnie, a także w przyszłości, jeśli kiedykolwiek wstawisz EMP_NUM, która również wstawi EMP_NAME, wtedy będzie łatwa do utrzymania


0 dla odpowiedzi nr 2

OMG, Masz stół pracowniczy w miejscu? Po prostu dołącz do niego

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

EDYTOWAĆ: Jeśli masz wpisy, które nie są zmapowane do użytkownika i nie chcesz ich ominąć

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

EDYTOWAĆ: Jeśli chcesz umieścić w tabeli pracowników z dokumentami tekstowymi

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

Następnie

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

Być może będziesz musiał to zmienić, Daj mi znać jakikolwiek problem.