webForumDet fria alternativet

variabler i subquery case

Databaser & SQL

2 svar · 275 visningar · startad av Dino

Medlem sedan sep. 20011 914 inlägg
Frågan#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
Medlem sedan dec. 200012 464 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.

Medlem sedan sep. 20011 914 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.

259 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
125 ms — deklarationer (db)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)