Permalänk
Medlem

SQL trubbel

Hej
Får inte rätt på detta för jag är inte så bra på SQL.

Jag har ett table som jag vill skapa en ny view för.
Det ser ut såhär:

Name Email ID Chef_ID Klas Klas@email.com 1 3 Sven Sven@email.com 2 3 Åke ake@email.com 3 5 Ingvar ingvar@email.com 5 4 Per per@emmail.com 4 null

För det jag ska använda vyn till behöver jag ha emailen som relation mellan användarna samt att alla som är en chef har en kolumn som tydligt visar detta. Jag tänker att ifall personens ID finns i Chef_ID kolumnen så ska kolumnen IsChef sättas till "yes"

Name Email ID Chef_ID ChefEmail isChef Klas Klas@email.com 1 3 ake@email.com no Sven Sven@email.com 2 3 ake@email.com no Åke ake@email.com 3 5 ingvar@email.com yes Ingvar ingvar@email.com 5 4 per@emmail.com yes Per per@email.com 4 null null yes

Jag har försökt en del men får inte till det. Antar att man ska göra någon join med sig själv?

Permalänk
Medlem
Permalänk
Medlem

Hej,
är det sql server dvs t-sql då är det enklaste att använda isnull().

Permalänk

Du kan ju sätta om det finns ett värde över 0 t.ex i Chef_ID så kan ju isChef sättas till 0/1 och där ifrån får ett yes/no

Permalänk
Medlem
Skrivet av MickeBoy:

Tack!
Nu har jag löst relationen med emails. Nu är det bara IsChef delen kvar.

Permalänk
Medlem
Skrivet av Math-ematics:

Du kan ju sätta om det finns ett värde över 0 t.ex i Chef_ID så kan ju isChef sättas till 0/1 och där ifrån får ett yes/no

hänger inte med på vad du menar. alla har ju ett värde över 0?

Permalänk
Medlem

Nu ser det ut så här. Jag får fram relationen anställd - chef med email.
Nu fattas bara att komma på hur jag vet att en anställd är chef eller inte.

SELECT T1.*, T2.Email ChefEmail FROM EmployeeTable T1 INNER JOIN EmployeeTable T2 ON T2.ID = T1.ChefID

Permalänk
Medlem

@Kapten_Kanel

Använd en Case sats.

CASE WHEN EXISTS(select 1 from employeeTable where ChefID=ID) THEN 'Yes' else 'no' END) AS isChef. Något i den stilen.

Visa signatur

R7-3700X, B450M Mortar MAX, 32GB DDR4 @ 3200, RTX 2080, Corsair CX650M Rev2

Permalänk
Medlem

Borde fungera (om jag inte blandat ihop namnet på din tabell i min SQL fiddle)

SELECT T1.*, T2.Email ChefEmail, CASE WHEN T1.ID IN (SELECT ID FROM EmployeeTable WHERE ID in (SELECT Chef_ID FROM EmployeeTable)) THEN "Yes" WHEN T1.Chef_ID IS NULL THEN "Yes" ELSE "No" END AS "IsChef" FROM EmployeeTable T1 LEFT OUTER JOIN People T2 ON T2.ID = T1.Chef_ID

Visa signatur

Grubblare

Permalänk
Medlem
Skrivet av drwlz:

Borde fungera (om jag inte blandat ihop namnet på din tabell i min SQL fiddle)

SELECT T1.*, T2.Email ChefEmail, CASE WHEN T1.ID IN (SELECT ID FROM EmployeeTable WHERE ID in (SELECT Chef_ID FROM EmployeeTable)) THEN "Yes" WHEN T1.Chef_ID IS NULL THEN "Yes" ELSE "No" END AS "IsChef" FROM EmployeeTable T1 LEFT OUTER JOIN People T2 ON T2.ID = T1.Chef_ID

Där satt den!
Tack alla!