Vinnaren i pepparkakshustävlingen!
2011-08-31, 12:14
  #1
Medlem
Har ett litet problem jag skulle behöva hjälp av att klura ut en lösning på. Jag har en tabell med massor av världen. Det jag vill göra är hur många unika världen som finns i varje kolumn och även ta då reda på om allt är null i en kolumn. Att göra det på en kolumn är lätt med
Kod:
 select count(distinct kol1) from tabel1
men hur gör man det på alla kolumner?
Citera
2011-08-31, 12:30
  #2
Moderator
Protons avatar
Citat:
Ursprungligen postat av el0
Har ett litet problem jag skulle behöva hjälp av att klura ut en lösning på. Jag har en tabell med massor av världen. Det jag vill göra är hur många unika världen som finns i varje kolumn och även ta då reda på om allt är null i en kolumn. Att göra det på en kolumn är lätt med
Kod:
 select count(distinct kol1) from tabel1
men hur gör man det på alla kolumner?
Du skulle kanske kunna använda UNION och räkna varje kolumn för sej och UNIONA ihop det till ett svar?
Citera
2011-08-31, 13:18
  #3
Medlem
Nostradumbasss avatar
select count(antal) from
(select count(distinct(col1)) as antal from tabell
union
select count(distinct(col2)) as antal from tabell
union
select count(distinct(coln)) as antal from tabell
) t

Ungefär så kanske...

EDIT: Syntax
__________________
Senast redigerad av Nostradumbass 2011-08-31 kl. 13:21.
Citera
2011-09-01, 09:50
  #4
Medlem
Citat:
Ursprungligen postat av Nostradumbass
select count(antal) from
(select count(distinct(col1)) as antal from tabell
union
select count(distinct(col2)) as antal from tabell
union
select count(distinct(coln)) as antal from tabell
) t

Ungefär så kanske...

EDIT: Syntax

Vet inte hur många kolumner. Hoppas det skulle gå att göra för godtyckligt antal
Citera
2011-09-01, 16:41
  #5
Medlem
desmoduss avatar
Citat:
Ursprungligen postat av el0
Vet inte hur många kolumner. Hoppas det skulle gå att göra för godtyckligt antal

Då får du nog kolla på att generera frågan som en sträng och exekvera den dynamiskt.

T.ex använda schematabellerna för att plocka ut alla kolumner i tabellen och sen bygga ihop en union. Kolla tabellen information_schema.columns (tror jag den heter, sitter inte vid en DB just nu).
Citera
2011-09-01, 23:48
  #6
Medlem
Nostradumbasss avatar
Citat:
Ursprungligen postat av el0
Vet inte hur många kolumner. Hoppas det skulle gå att göra för godtyckligt antal

Då skulle jag nog tänka mig för mer än en gång på att ändra datamodell. En databastabell
är tvärtemot vad många tror inte ett excelark.
Citera
2011-09-02, 11:22
  #7
Medlem
Citat:
Ursprungligen postat av Nostradumbass
Då skulle jag nog tänka mig för mer än en gång på att ändra datamodell. En databastabell
är tvärtemot vad många tror inte ett excelark.
Tyvärr består världen av massor med tabeller som du inte kan eller får ändra på(strukturen). Vanligtvis så är tabellerna inte ens lika. Om jag kunde ändra på tabellerna så skulle det inte vara ett problem men nu får jag lösa detta med någon form av script använder sys.columns och som sedan genererar en temporär lista.
Citera
2011-09-02, 11:28
  #8
Medlem
Nostradumbasss avatar
Citat:
Ursprungligen postat av el0
Tyvärr består världen av massor med tabeller som du inte kan eller får ändra på

I hear ya.

Då får du antingen göra som den andra postaren sa att kolla i datadictionaryt,
och göra en dynamisk SQL beroenede på tabellens kolumner, eller göra många olika
versioner av en handskriven SQL.
Citera
2011-09-17, 12:23
  #9
Medlem
TsopEs avatar
Det låter som du vill Pivotera din tabell..

Kolla på PIVOT OVER (PARTITON BY xxx ORDER BY yyy)
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback