[SQL Database] Records in kolommen weergeven

Pagina: 1
Acties:
  • 749 views

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Beste tweakers,

Ik zit enige tijd met dit probleem.Wij hebben een applicatie [.NET gebaseerd] en haalt de informatie uit een SQL server.

Wij hebben heel veel servers en deze servers moeten in kaart worden gebracht met al hun informatie.
Denk aan OS, RAM, CPU, MAC-adressen etc.

Voor het ophalen van deze informatie gebruiken wij Microsoft System Center.
Ik krijg wel keurig alle informatie in de .NET applicatie, echter is het zo dat ik duplicate data krijg.
Dit is wat ik nu zie;

MAC-Address SerialNumber
00:15:C5:F0:01:97 7C8MQ2J
00:15:C5:F0:01:99 7C8MQ2J
00:15:C5:F0:01:99 7C8MQ2J
00:15:C5:F0:01:97 7C8MQ2J
00:15:C5:F0:01:99 7C8MQ2J
00:15:C5:F0:01:99 7C8MQ2J


Dit is wat ik wil zien;


NIC#1 NIC#2 SerialNumber
00:15:C5:F0:01:97 00:15:C5:F0:01:99 7C8MQ2J


Hoe krijg ik dit in godsnaam voor elkaar?

Ik heb zelf basis kennis van SQL maar wij hebben ook een SQL specialist in huis, maar die is tijdelijk niet op kantoor.


Hopelijk hebben jullie een idee.


Thanks

Acties:
  • 0 Henk 'm!

  • Tharulerz
  • Registratie: April 2009
  • Laatst online: 10-04 05:16
Waarom kan je dit niet oplossen in je .NET applicatie? Waarom moet je per se het in die volgorde uit SQL krijgen?

Acties:
  • 0 Henk 'm!

  • leeke1984
  • Registratie: Augustus 2005
  • Laatst online: 26-02 19:52
group by mac adress

Acties:
  • 0 Henk 'm!

  • BertS
  • Registratie: September 2004
  • Laatst online: 14-04 17:14
Wat is je tabelindeling?
En welke query gebruik je nu?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik ben geen .NET programmeur. Dit is ook een kante en klare applicatie van onze leverancier.
Wij kunnen in deze applicatie gewoon SQL bron selecties maken en koppelen aan formulieren.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Verwijderd schreef op vrijdag 09 april 2010 @ 13:02:
[...]


Ik ben geen .NET programmeur. Dit is ook een kante en klare applicatie van onze leverancier.
Wij kunnen in deze applicatie gewoon SQL bron selecties maken en koppelen aan formulieren.
SELECT DISTINCT
Computer_System_DATA.Domain0, Computer_System_DATA.Model0, Computer_System_DATA.Name0, Computer_System_DATA.Manufacturer00,
Computer_System_DATA.NumberOfProcessors00, Processor_DATA.Manufacturer0, PC_Memory_DATA.TotalPhysicalMemory0,
Processor_DATA.Name0, Disk_DATA.Manufacturer00, Disk_DATA.Size0, Disk_DATA.Model0, Disk_DATA.Name0,
Network_DATA.IPAddress0, Netcard_DATA.ProductName0, Netcard_DATA.Name0, Netcard_DATA.Manufacturer0,
Netcard_DATA.MACAddress0, PC_BIOS_DATA.SerialNumber00, Operating_System_DATA.Caption0, Operating_System_DATA.CSDVersion0

FROM Processor_DATA INNER JOIN
Computer_System_DATA ON Processor_DATA.MachineID = Computer_System_DATA.MachineID INNER JOIN
PC_Memory_DATA ON Processor_DATA.MachineID = PC_Memory_DATA.MachineID INNER JOIN
Disk_DATA ON Processor_DATA.MachineID = Disk_DATA.MachineID INNER JOIN
Network_DATA ON Processor_DATA.MachineID = Network_DATA.MachineID INNER JOIN
Netcard_DATA ON Processor_DATA.MachineID = Netcard_DATA.MachineID INNER JOIN
PC_BIOS_DATA ON Processor_DATA.MachineID = PC_BIOS_DATA.MachineID INNER JOIN
Operating_System_DATA ON Processor_DATA.MachineID = Operating_System_DATA.MachineID

WHERE (Network_DATA.IPAddress0 <> 'NULL') AND (Netcard_DATA.MACAddress0 <> 'NULL') AND (Netcard_DATA.Manufacturer0 NOT LIKE '%Microso%')

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
BertS schreef op vrijdag 09 april 2010 @ 13:00:
Wat is je tabelindeling?
En welke query gebruik je nu?
hmmm...
Worden ze dan niet bij elkaar opgeteld ?

Acties:
  • 0 Henk 'm!

  • leeke1984
  • Registratie: Augustus 2005
  • Laatst online: 26-02 19:52
Wat leesbaarder:

SQL: filename
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
SELECT DISTINCT Computer_System_DATA.Domain0,
                Computer_System_DATA.Model0,
                Computer_System_DATA.Name0,
                Computer_System_DATA.Manufacturer00,
                Computer_System_DATA.NumberOfProcessors00,
                Processor_DATA.Manufacturer0,
                PC_Memory_DATA.TotalPhysicalMemory0,
                Processor_DATA.Name0,
                Disk_DATA.Manufacturer00,
                Disk_DATA.Size0,
                Disk_DATA.Model0,
                Disk_DATA.Name0,
                Network_DATA.IPAddress0,
                Netcard_DATA.ProductName0,
                Netcard_DATA.Name0,
                Netcard_DATA.Manufacturer0,
                Netcard_DATA.MACAddress0,
                PC_BIOS_DATA.SerialNumber00,
                Operating_System_DATA.Caption0,
                Operating_System_DATA.CSDVersion0

  FROM Processor_DATA
 INNER JOIN Computer_System_DATA ON Processor_DATA.MachineID = Computer_System_DATA.MachineID
 INNER JOIN PC_Memory_DATA ON Processor_DATA.MachineID = PC_Memory_DATA.MachineID
 INNER JOIN Disk_DATA ON Processor_DATA.MachineID = Disk_DATA.MachineID
 INNER JOIN Network_DATA ON Processor_DATA.MachineID = Network_DATA.MachineID
 INNER JOIN Netcard_DATA ON Processor_DATA.MachineID = Netcard_DATA.MachineID
 INNER JOIN PC_BIOS_DATA ON Processor_DATA.MachineID = PC_BIOS_DATA.MachineID
 INNER JOIN Operating_System_DATA ON Processor_DATA.MachineID = Operating_System_DATA.MachineID

 WHERE (Network_DATA.IPAddress0 <> 'NULL')
   AND (Netcard_DATA.MACAddress0 <> 'NULL')
   AND (Netcard_DATA.Manufacturer0 NOT LIKE '%Microso%')

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
leeke1984 schreef op vrijdag 09 april 2010 @ 13:24:
Wat leesbaarder:

SQL: filename
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
SELECT DISTINCT Computer_System_DATA.Domain0,
                Computer_System_DATA.Model0,
                Computer_System_DATA.Name0,
                Computer_System_DATA.Manufacturer00,
                Computer_System_DATA.NumberOfProcessors00,
                Processor_DATA.Manufacturer0,
                PC_Memory_DATA.TotalPhysicalMemory0,
                Processor_DATA.Name0,
                Disk_DATA.Manufacturer00,
                Disk_DATA.Size0,
                Disk_DATA.Model0,
                Disk_DATA.Name0,
                Network_DATA.IPAddress0,
                Netcard_DATA.ProductName0,
                Netcard_DATA.Name0,
                Netcard_DATA.Manufacturer0,
                Netcard_DATA.MACAddress0,
                PC_BIOS_DATA.SerialNumber00,
                Operating_System_DATA.Caption0,
                Operating_System_DATA.CSDVersion0

  FROM Processor_DATA
 INNER JOIN Computer_System_DATA ON Processor_DATA.MachineID = Computer_System_DATA.MachineID
 INNER JOIN PC_Memory_DATA ON Processor_DATA.MachineID = PC_Memory_DATA.MachineID
 INNER JOIN Disk_DATA ON Processor_DATA.MachineID = Disk_DATA.MachineID
 INNER JOIN Network_DATA ON Processor_DATA.MachineID = Network_DATA.MachineID
 INNER JOIN Netcard_DATA ON Processor_DATA.MachineID = Netcard_DATA.MachineID
 INNER JOIN PC_BIOS_DATA ON Processor_DATA.MachineID = PC_BIOS_DATA.MachineID
 INNER JOIN Operating_System_DATA ON Processor_DATA.MachineID = Operating_System_DATA.MachineID

 WHERE (Network_DATA.IPAddress0 <> 'NULL')
   AND (Netcard_DATA.MACAddress0 <> 'NULL')
   AND (Netcard_DATA.Manufacturer0 NOT LIKE '%Microso%')
Thanks

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Wil je heel even topickick binnen 24 uur doornemen? Ik heb je al 3 keer het topic omhoog zien schoppen terwijl je de edit knop ( Afbeeldingslocatie: http://tweakimg.net/g/forum/images/icons/edit.gif ) als je iets toe te voegen hebt had kunnen gebruiken; je topic herhaaldelijk omhoogschoppen is niet nodig. En hoewel je thanks goedbedoeld is, is het a) dan niet nodig om een complete lap te quoten en b) weer een "onnodige" schop. En kijk dan meteen even naar code tags ;)

[ Voor 13% gewijzigd door RobIII op 09-04-2010 13:40 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Dido
  • Registratie: Maart 2002
  • Laatst online: 18:47

Dido

heforshe

Ik vermoed (gezien de DISTINCT in de query) dat je helemaal geen dubbele data krijgt.

Je krijgt waarschijnlijk allemaal verschillende rijen, maar kennelijk wil je dat niet. Dan is de vraag heel simpel: wat wil je wel?

Wat betekent mijn avatar?


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Moderator - excuse moi. Ik heb dit niet met opzet gedaan.


Dido,
Dit is wat ik nu zie in mijn view. Teveel rijen van 1 server.


MAC-Address SerialNumber
00:15:C5:F0:01:97 7C8MQ2J
00:15:C5:F0:01:99 7C8MQ2J
00:15:C5:F0:01:99 7C8MQ2J
00:15:C5:F0:01:97 7C8MQ2J
00:15:C5:F0:01:99 7C8MQ2J
00:15:C5:F0:01:99 7C8MQ2J


En eigenlijk wil ik dit zien.

NIC#1 NIC#2 SerialNumber
00:15:C5:F0:01:97 00:15:C5:F0:01:99 7C8MQ2J

Dus bijna hetzelfde als de statement "GROUP BY" maar dan wil ik ze niet bij elkaar optellen maar een eigen kolom per afwijkende NIC.


Uiteindelijk heb ik diverse kolommen;
Hier een voorbeeld van het resultaat:

Servernaam IP-adres NIC-Adapter 1 NIC-Adapter 2
SRVSQL01 192.168.5.45 42:F2:73:4D:32:62 00:0D:56:FD:FF:73


Ik weet, het is lastig. Maar ik weet dat het kan.

Acties:
  • 0 Henk 'm!

  • Dido
  • Registratie: Maart 2002
  • Laatst online: 18:47

Dido

heforshe

Verwijderd schreef op vrijdag 09 april 2010 @ 14:11:
Dido,
Dit is wat ik nu zie in mijn view. Teveel rijen van 1 server.


MAC-Address SerialNumber
00:15:C5:F0:01:97 7C8MQ2J
00:15:C5:F0:01:99 7C8MQ2J
00:15:C5:F0:01:99 7C8MQ2J
00:15:C5:F0:01:97 7C8MQ2J
00:15:C5:F0:01:99 7C8MQ2J
00:15:C5:F0:01:99 7C8MQ2J
Dat geloof ik simpelweg niet.

Je selecteert20 (!!!!) kolommen, en je zegt hier dat je er maar twee ziet.
En eigenlijk wil ik dit zien.

NIC#1 NIC#2 SerialNumber
00:15:C5:F0:01:97 00:15:C5:F0:01:99 7C8MQ2J
Begin nou eens met volledig en duidelijk zijn: wat wil je? Echt maar die twee (of zijn het er nou toch drie, of zijn het er toch stiekum 20?) kolommen?
Dus bijna hetzelfde als de statement "GROUP BY" maar dan wil ik ze niet bij elkaar optellen maar een eigen kolom per afwijkende NIC.
Een group by telt helemaal niets op.
Een kolom is niet hetzelfde als een rij, en ik vermoed dat je het verschil of niet kent, of erg slordig formuleert.
Uiteindelijk heb ik diverse kolommen;
Hier een voorbeeld van het resultaat:

Servernaam IP-adres NIC-Adapter 1 NIC-Adapter 2
SRVSQL01 192.168.5.45 42:F2:73:4D:32:62 00:0D:56:FD:FF:73
En nu hebben we opeens 4 kolommen.

Dus, nog een keer: leg nou eens duidelijk uit wat je wil, want ik vermoed eigenlijk dat je op dit moment gewoon 20 kolommen terugkrijgt, en dat er geen twee regels hetzelfde zijn in je resultaat.

Dat je verder helemaal geen 20 kolommen wilt zien, maar slechts een paar.

En dat je dus een heel eind komt door de kolommen die je niet wilt uit je select statement te slopen.

MAAR: dat zijn allemaal aannames, want weten kan ik het niet met de tegenstrijdige informatie die je geeft ;)

Wat betekent mijn avatar?


Acties:
  • 0 Henk 'm!

  • Orion84
  • Registratie: April 2002
  • Laatst online: 17:28

Orion84

Admin General Chat / Wonen & Mobiliteit

Fotogenie(k)?

Volgens mij wil ie wel alle kolommen, maar wil ie maar één regel per machine. Nu krijgt ie meerdere regels per machine omdat een machine bijvoorbeeld meerdere netwerkkaarten heeft (waarschijnlijk nog wel meer dubbele onderdelen mogelijk).

Als je een machine op één regel wilt hebben, dan moet je elke tabel waarin meerdere entries (zeg X) voor die machine staan X keer opnemen in je join volgens mij? En dan daarna nog wat slims doen om per machine de juiste regel er uit te vissen, tenminste mijn kennis van SQL is een beetje roestig, maar ik denk dat je door simpelweg die tabel meerdere keren te joinen je in eerste instantie juist meer regels krijgt, waaronder de gewenste.

Maar aangezien het aantal voorkomens vast niet vooraf vast staat en het ook per machine verschilt vraag ik me af of je dit soort dingen wel in SQL wilt oplossen, maargoed, ik ben geen SQL held, dus wellicht kan het inderdaad wel.

The problem with common sense is that it's not all that common. | LinkedIn | Flickr


Acties:
  • 0 Henk 'm!

  • Dido
  • Registratie: Maart 2002
  • Laatst online: 18:47

Dido

heforshe

Het is heel simpel: als je per machine meerdere regels terugkrijgt terwijl je er maar 1 wilt moet je je afvragen welke regel je wilt: die met kolom32=X of kolom32=Y.

Althans, het is meestal zo dat er wel degelijk verschillen op die regels staan (distinct werkt echt wel, namelijk) maar dat daar stomweg overheen gekeken wordt. Dan krijg je dus pertinent onware uitspraken als:

Ik krijg dubbel rijen, kijk maar:
code:
1
2
3
4
5
6
X  Y  Z  1  2  3  4  5 .01
X  Y  Z  1  2  3  4  5 .02
X  Y  Z  1  2  3  4  5 .03
X  Y  Z  1  2  3  4  5 .04
X  Y  Z  1  2  3  4  5 .05
X  Y  Z  1  2  3  4  5 .06

Dat vermoed ik hier dus ook, vooral omdat we maar een paar kolommen te zien krijgen. En aan
code:
1
2
3
4
5
6
X  Y  Z
X  Y  Z
X  Y  Z
X  Y  Z
X  Y  Z
X  Y  Z

kan een normaal mens niets zinnigs zien, zeker niet als je aan de query ziet dat er nog 17 kolommen in de output staan die voor het gemak genegeerd worden.

Wat betekent mijn avatar?


Acties:
  • 0 Henk 'm!

  • Orion84
  • Registratie: April 2002
  • Laatst online: 17:28

Orion84

Admin General Chat / Wonen & Mobiliteit

Fotogenie(k)?

Dido schreef op vrijdag 09 april 2010 @ 15:25:
Het is heel simpel: als je per machine meerdere regels terugkrijgt terwijl je er maar 1 wilt moet je je afvragen welke regel je wilt: die met kolom32=X of kolom32=Y.
Hij wil dus ipv die twee regels één regel met kolom32a=X en kolom32b=Y als ik het goed begrijp :)

Inderdaad, hij legt het wat onhandig uit me de beknopte voorbeelden en zo, maar dit is in elk geval wat ik er uit haal...

The problem with common sense is that it's not all that common. | LinkedIn | Flickr


Acties:
  • 0 Henk 'm!

  • arnob
  • Registratie: Juli 2000
  • Niet online
kijk anders in de books online naar de pivot en unpivot. dat is denk ik wat je zoekt.
Je kan ook met de hand pivot'ten, dan heb je meer controle maar ik denk dat dat niet nodig is..

Acties:
  • 0 Henk 'm!

  • Dido
  • Registratie: Maart 2002
  • Laatst online: 18:47

Dido

heforshe

Orion84 schreef op vrijdag 09 april 2010 @ 15:28:
Hij wil dus ipv die twee regels één regel met kolom32a=X en kolom32b=Y als ik het goed begrijp :)

Inderdaad, hij legt het wat onhandig uit me de beknopte voorbeelden en zo, maar dit is in elk geval wat ik er uit haal...
Als dat zo is moet je inderdaad niet met SQL verdergaan, want dan ben je je dataweergave aan het verfraaien, daar zijn veel betere tools voor.

Maar ik zou wel eens willen weten welke glazen bol nou het dichtst in de buurt komt :P

Wat betekent mijn avatar?


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Sorry dat ik zo onduidelijk was. Het is heel erg complex, zeker als je met zoveel tabellen en records werkt.

Ik denk dat jullie nu begrijpen waar ik naartoe wil. Wij werken met Microsoft System Center.
Alle machines die in de db zitten hebben een bepaalde "unieke-sleutel", wat hier de "machine-ID"wordt genoemd met daaraan gerelateerde kenmerktabellen waar IP-adressen, mac's, etc. staan.

Dwz dat het wel mogelijk is, door gebruik te maken van de combi "DISTINCT" en "JOIN".
De vraag is alleen hoe ik dat kan toepassen.

Acties:
  • 0 Henk 'm!

  • Dido
  • Registratie: Maart 2002
  • Laatst online: 18:47

Dido

heforshe

Ik haak af, want ik begrijp echt nog steeds niet waar je naar toe wil. Wel dat je denkt dat het ingewikkeld is (wellicht is dat ook zo, geen idee), en dat je al verzonnen hebt dat je distinct en join wilt gebruiken (waarom je die disctinct wil is onduidelijk, meestal is die nergens voor nodig behalve lapwerk), maar je legt nog steeds niet uit wat je wilt.

Sterker nog, het is me nog steeds niet duidelijk wat je huidige resultaat is, en wat je daar precies aan wilt veranderen. Je post een query met twintig kolommen, en ik moet uit een vage beschrijving en een paar kolommen concluderen wat je wilt. Da's niet moeilijk, da's onmogelijk.

Ik kan mijn vragen niet simpeler meer stellen.

Wat betekent mijn avatar?


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
hey Dildo,

Aan de hand van je commentaar kan ik eruit trekken dat je weinig verstand hebt van IT.
Je blijft constant vragen wat ik wil. Het is niet moeilijk, mijn vraag had ik diverse keren herhaald. Dus ik haak ook af met uitleggen. Collega is volgende week terug, die kijkt er wel naar.

Voortaan dingen beter vragen. Dan zal ik ook beter antwoorden.
Misschien heb jij meer ervaring met SQL en krijg je de antwoorden die je niet wilt weten. Tsjah, als gij ervaring hebt zul je vanzelf de vragen op de juiste manier stellen. Ik ben namelijk geen SQL expert. Dat heb je vast wel bij klanten gehad (als je ooit met ze werkt).

Ik wil toch iedereen bedanken voor het reageren. Wanneer ik raad heb, zal ik hierop terugkomen.

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
:w Zo gaan we niet met elkaar om.
Iedereen is gek en jij weet het precies d:)b FYI: Niemand kon hout snijden van je topic.

[ Voor 62% gewijzigd door RobIII op 09-04-2010 16:54 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij

Pagina: 1

Dit topic is gesloten.