Vet inte vad jag skulle skriva som rubrik, vill i alla fall att nedan kod skall fungera. Så finns det något alternativ till att få det att funka?
DECLARE @type char(4)
DECLARE @tableid int
SELECT
AAA,
BBB,
ISNULL
(
(
SELECT TOP (1) @type = Table2.Type, @tableid = Table2.TableId
FROM Table2
WHERE (Table2.Table1Id = Table1.Id ) AND (GETDATE() BETWEEN Table2.StartDate AND Table2.EndDate)
ORDER BY Table2.TableId DESC, Table2.Type DESC
)
CASE @type
WHEN 'aqaq' THEN
(
SELECT Table3.CCC
FROM Table3
WHERE (Table3.Id = @tableid)
)
WHEN 'swsw' THEN
(
SELECT Table4.CCC
FROM Table4
WHERE (Table4.Id = @tableid)
)
END
, CCC) as CCC
FROM Table1
SELECT
AAA,
BBB,
case (SELECT max(type)
FROM Table2
WHERE Id = Table1.Id)
WHEN 'aqaq' THEN
(SELECT max(CCC)
FROM Table3
WHERE Id = table1.id)
WHEN 'swsw' THEN
(SELECT max(CCC)
FROM Table4
WHERE Id = table1.id)
else ccc END as CCC
FROM Table1
Rent allmänt så får jag intryck av en suspekt datamodell.
1. Det är jag som skrivit fel i inlägget, skall vara Table2. Redigerat.
2. Orkade inte skriva in all kod *lat*. Redigerat.
Beskrivning.
CREATE TABLE Table2
(
Id int,
Table1Id int,
Type char(4),
TableId int
StartDate
EndDate
)
Tanken är då att för varje rad i Table1 gå in i Table2 och se ur vilken annan tabell som den skall hämta värdet CCC beroende på Table1Id och där StartDate och EndDate är mellan GetDate(). Table2.Type är då vilken tabell och Table2.TableId är vilken rad i tabellen värdet ligger.
Se första inlägget för redigeringar i koden.
259 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849