webForumDet fria alternativet

variabler i subquery case

2 svar · 273 visningar · startad av Dino

DinoMedlem sedan sep. 20011 918 inlägg
#1

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
LarsGMedlem sedan dec. 200012 465 inlägg
#2
@type = Table1.Type

table2 istf table1?

Varför top 1 utan order by?

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.

DinoMedlem sedan sep. 20011 918 inlägg
#3

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.

Genererad på 381 ms · cache AV · v20260730165559-full.f96bc7eb