kazarma Ierakstīts Oktobris 15, 2014 Share Ierakstīts Oktobris 15, 2014 (labots) Labdien, ir divi vaicājumi: 1.select model,mb from MyPC where mb is not null 2.select model,ram from MyPC where ram is not null kuri atgriež : 1 model mb x v x b 2 model ram x q Vajaga šos divus vaicājumus apvienot vienā outputā: model mb ram x v q x b Kāds var izlīdzēt? UPDATE Piemērs no oriģinālās tabulas: model MB RAM CPU ... 1 x NULL NULL b 2 x y NULL NULL 3 x NULL c NULL 4 x NULL c NULL 5 x NULL c NULL Vajadzīgais rezultāts: model MB RAM CPU ... 1 x y c b 2 x c 3 x c Links uz bildi http://failiem.lv/g/...#aa/Capture.JPG Links uz rezultāta bildi http://failiem.lv/u/miivqvb Labots Oktobris 15, 2014 - kazarma Link to comment Share on other sites More sharing options...
Salmo Oktobris 15, 2014 Share Oktobris 15, 2014 (labots) select model, mb, ram from MyPC where mb is not null and ram is not null Labots Oktobris 15, 2014 - Salmo Link to comment Share on other sites More sharing options...
kazarma Oktobris 15, 2014 Author Share Oktobris 15, 2014 (labots) Neder, jo ir ieraksti kuros ram ir pilns un mb ir tukš un otrādi. @Salmo izmantojot tavu vaicājumu tiek atgrieztas 3 tukšas kolonnas. Reāli vajaga apvienot augstāk minēto vaicājumu outputus ar kaut kādu temp tabulu? Inner/outer join? Reāli nav tik daudz pieredzes ar SQL, lai zinātu kas vispār ir iespējams. Labots Oktobris 15, 2014 - kazarma Link to comment Share on other sites More sharing options...
ju Oktobris 15, 2014 Share Oktobris 15, 2014 Nevis and, bet or jāizmanto Ja tur daudz datu, operatoru "is not" labāk neizmantot, būs lēnāk. Link to comment Share on other sites More sharing options...
kazarma Oktobris 15, 2014 Author Share Oktobris 15, 2014 (labots) @Ju Arī ar or neder, jo mērķis ir likvidēt NULL ierakstus. Tavā gadījumā man tiek atgriezta tā pati tabula ar NULL ierakstiem. Piemērs no oriģinālās tabulas: model MB RAM CPU ... 1 x NULL NULL b 2 x y NULL NULL 3 x NULL c NULL 4 x NULL c NULL 5 x NULL c NULL Vajadzīgais rezultāts: model MB RAM CPU ... 1 x y c b 2 x c 3 x c Labots Oktobris 15, 2014 - kazarma Link to comment Share on other sites More sharing options...
Mezavecis Oktobris 15, 2014 Share Oktobris 15, 2014 Rezultāts ir kaut kas nesaprotams. Nu nevar izveidot tādu ierakstu, kuram MB = y, RAM = c un CPU = b ar konkrēto modeli x, jo oriģinālā tabulā tāda ieraksta nav. Jāsaprot, ka atlasīt ierakstus nav tas pats, kas uzģenerēt tabulu pēc ierakstu satura. Link to comment Share on other sites More sharing options...
kazarma Oktobris 15, 2014 Author Share Oktobris 15, 2014 (labots) Noteikti, kad var, jo: 1.select model,mb from MyPC where mb is not null 2.select model,ram from MyPC where ram is not null atgriež : model mb x v model ram x q x a Loģiski ir jāvar šos outputus apvienot radot vajadzīgo rezultātu. model mb ram x v q x a Labots Oktobris 15, 2014 - kazarma Link to comment Share on other sites More sharing options...
ju Oktobris 15, 2014 Share Oktobris 15, 2014 Ja negribi redzēt NULL ierakstus tukšajās cellēs, maini iestatījumus pašā datu bāzē/tās klientā. ā pareizi, tur vēl pēc kaut kādas mistiskas grupēšanas izskatās tad vajag saprast, pēc kā grupēt Link to comment Share on other sites More sharing options...
itanium Oktobris 15, 2014 Share Oktobris 15, 2014 (labots) Iedod lūdzu datus, kur x vietā ir kas normāls, lai tavi piemēri liktos jēdzīgāki. Un vēl, kas par DB? MySQL vai Oracle, vai vēl kāda cita? Labots Oktobris 15, 2014 - itanium Link to comment Share on other sites More sharing options...
kazarma Oktobris 15, 2014 Author Share Oktobris 15, 2014 Netiek grupēts principā vajaga NULL ierakstus likvidēt Link to comment Share on other sites More sharing options...
Mezavecis Oktobris 15, 2014 Share Oktobris 15, 2014 Kas ir x? Ja tas ir unikāls skaitlis vai virkne, tad neko tur sagrupēt nevarēs. Tas ko tu vēlies, nav ierakstu likvidēšana, bet jaunas tabulas izveide. Ieraksts SQL izpratnē ir rinda nevis viena šūna. Link to comment Share on other sites More sharing options...
kazarma Oktobris 15, 2014 Author Share Oktobris 15, 2014 Pievienoju attēlu, kā izskatās outputs - kāpēc sanāca tik mazs atttēls nezinu. @Mezavecis x nav unikāls - mēģini acis pamežģīt pie pievienotā attēla varbūt tur būs tev skaidrība. Link to comment Share on other sites More sharing options...
itanium Oktobris 15, 2014 Share Oktobris 15, 2014 Ieliec augstākas kvalitātes attēlu, a to nevar saprast vai dažas šūnas atšķiras vai nē. Link to comment Share on other sites More sharing options...
kazarma Oktobris 15, 2014 Author Share Oktobris 15, 2014 Es nezinu kāpēc boot.lv pievienoto failu saspiež tā - manā kompī tas ir augstā izšķirtspējā. http://failiem.lv/g/hjgffen#aa/Capture.JPG Link to comment Share on other sites More sharing options...
itanium Oktobris 15, 2014 Share Oktobris 15, 2014 (labots) Tev vienam un tam pašam modelim ir četri dažādi RAM un divi dažādi CD-ROM. Kādu tu esi iedomājies atlases vaicājuma rezultātu uz reāliem datiem? Labots Oktobris 15, 2014 - itanium Link to comment Share on other sites More sharing options...
kazarma Oktobris 15, 2014 Author Share Oktobris 15, 2014 (labots) Es nevaru saprast, ko var burties. Es zinu, ka vienā select nevar dabūt to ko vajaga. Tāpēc sīki un smalki aprakstīju KO man vajaga. Man vajaga apvienot DIVU dažādu select OUTPUTUS, tas arī viss. Tiem, kas visu nelasa atkārtošu velreiz: 1.select model,mb from MyPC where mb is not null 2.select model,ram from MyPC where ram is not null kuri atgriež : KOREKTS OUTPUTS TIEŠI TAS KO VAJAGA! 1 model mb x v x b KOREKTS OUTPUTS TIEŠI TAS KO VAJAGA! 2 model ram x q Vajaga šos divus vaicājumu outputus apvienot vienā outputā: model mb ram x v q x b Teorētiski var pat teikt, ka pie pirmā outputa ir brutāli jāpielīmē klāt kolonna RAM no otrā outputa. Secība nav svarīga. Svarīgi ir tikai (skatīties bildi) likvidēt tukšos kollonu ierakstus. Labots Oktobris 15, 2014 - kazarma Link to comment Share on other sites More sharing options...
itanium Oktobris 15, 2014 Share Oktobris 15, 2014 (labots) Un tagad ar reāliem datiem parādi, kāds ir sagaidāmais rezultāts Savādāk liekas, ka kaut ko tomēr neesi līdz galam izdomājis. Labots Oktobris 15, 2014 - itanium Link to comment Share on other sites More sharing options...
Salmo Oktobris 15, 2014 Share Oktobris 15, 2014 (labots) Tev katra kolonna domāta kā unikālo katras kolonnas ierakstu saraksts? model mb ram x null null x v null x null null x b null x null q Tev vajag lai ne null vērtības katrā kolonnā "pabīdās" uz augšu? model mb ram x v q x b Labots Oktobris 15, 2014 - Salmo Link to comment Share on other sites More sharing options...
kazarma Oktobris 15, 2014 Author Share Oktobris 15, 2014 (labots) @Salmo Ja pareizi tevi sapratu, tad atbilde ir jā. @itanium Kas ir tagad izmantojot vaicājumu : Select * from mypc where model='OptiPlex 7010 6NZYH5J' http://failiem.lv/g/hjgffen#aa/Capture.JPG Kas ir vajadzīgs izmantojot vēl nezināmu vaicājumu http://failiem.lv/u/miivqvb Svarīgi ir saprast, ka kollona Model ir izmantotā kā unikālais ID pēc kura es datus atlasu , pēc tam tie ir jāparveido lai atbilst pārskatāmam output attēlam. Savādāk kā var redzēt nemodificētā attēlā, kas ir brutāls "Select * from mypc where model='OptiPlex 7010 6NZYH5J' " outputs ir nepārskatāma informācija. Ieraksti par jauniem PC tiks pievienoti klāt šai pašai tabulai un pirmatnējā select mainīsies tikai X sadaļa "Select * from mypc where model='X' " Labots Oktobris 15, 2014 - kazarma Link to comment Share on other sites More sharing options...
versatile Oktobris 15, 2014 Share Oktobris 15, 2014 nu bet tad tā arī dari slinkums rakstīt, bet atlasi visu rzultātu kopu no to divu 2-kolonnu tabulu full joina pēc modeļa. Vai, ja nav vispār pēc kā sasaistīt, tad raksti selectu no trim tabulām, kurā katrā ir distinct selects pēc katras no vērtībām. Dabūsi visas kombinācijas. Link to comment Share on other sites More sharing options...
kazarma Oktobris 15, 2014 Author Share Oktobris 15, 2014 (labots) @Versatile Pilnīgi neko nesapratu Es māku uzrakstīt parastu select bet parējais tavs teksts man ir kā ķīniešu ābece. Ja nav reāla piemēra es tālāk nekur netikšu. Tas ko es domāju : 1) Atlasa datus pēc vaicājuma: "Select * from mypc where model='X' un ievieto tos kaut kāda temp tabulā. 2) select model,mb from MyPC where mb is not null select model,ram from MyPC where ram is not null utt un ievieto tos katru savā temp tabulā. 3) Vaicājums no otrā punkta pirmajai temp tabulai pievienot otrās tabulas kollonu trešās temp tabulas kollonu utt. 4) Parāda gala temp tabulu BET nav vajadzīgo zināšanu, lai šo uzrasktītu, tāpēc griežos šeit pēc palīdzības. Labots Oktobris 15, 2014 - kazarma Link to comment Share on other sites More sharing options...
versatile Oktobris 15, 2014 Share Oktobris 15, 2014 (labots) Vispār, ir labs teiciens,a ttiecībā uz datiem un analītiku - shit in, shit out. ok, mēģinam tā. Select a.*, b.* from (select model, ram from tabula) a inner join (select model, mb from tabula) b on a.model = b.model where a.model = 'figņaflex' joinu varbūt vajag full Nesaku, ka viss korekti, bet nu šitāda ideja neder? Labots Oktobris 15, 2014 - versatile Link to comment Share on other sites More sharing options...
kazarma Oktobris 15, 2014 Author Share Oktobris 15, 2014 (labots) Nezinu pamēģināšu Pamēģināju - NULL ieraksti saglabājas. Galarezultāts tāds pats itkā būtu veikts parasts select * from mypc where model='figņaflex' tikai protams paliek trīs kollonas model ram un MB Īstenībā Model kollona ir 2x , bet tas neko nemaina. Vari lūdzu uzrakstīt kodu kā vieni tabulai pielipināt brutāli kollonu no otras tabulas? Labots Oktobris 15, 2014 - kazarma Link to comment Share on other sites More sharing options...
Skurstenis Oktobris 15, 2014 Share Oktobris 15, 2014 Kaut kā tā: Tabula: create table TMP_MPC (model varchar(32), mb varchar(32), ram varchar(32), cpu varchar(32)); Dati: insert into TMP_MPC values ('x', null, null, 'b');insert into TMP_MPC values ('x', 'v', null, null);insert into TMP_MPC values ('x', 'b', null, null);insert into TMP_MPC values ('x', null, 'q', null);insert into TMP_MPC values ('x', null, 'z', null);insert into TMP_MPC values ('x', null, null, null); Selects: -- tie, kam ir gan mb, gan ramselect unique model, mb, ram from TMP_MPC where mb is not null and ram is not null and model = 'x'union allselect mbs.model, mbs.mb, rams.ram from -- ir mb, nav ram(select unique model, mb, ram from TMP_MPC where mb is not null and ram is null and model = 'x') mbs, -- ir ram, nav mb(select unique model, mb, ram from TMP_MPC where mb is null and ram is not null and model = 'x') rams; Rezultāts: MODEL MB RAM ----- --- ----x v qx v zx b qx b z , tikai nav gluži tas, ko vajadzēja, jo te būs visas kombinācijas no mb un ram-iem Link to comment Share on other sites More sharing options...
camel Oktobris 15, 2014 Share Oktobris 15, 2014 (labots) Neasprotu, kapēc šādi: model mb ram x v q x b A ne šādi: model mb ram x v q x b q Labots Oktobris 15, 2014 - camel Link to comment Share on other sites More sharing options...
versatile Oktobris 15, 2014 Share Oktobris 15, 2014 Klau, a neder tiem datiem slēgties klāt ar exceli un pivotā grozīt? Link to comment Share on other sites More sharing options...
Skurstenis Oktobris 15, 2014 Share Oktobris 15, 2014 Gandrīz tas, ko vajag:select mdl.model, mbs.mb, rams.ramfrom(select row_number() OVER (ORDER BY model) AS rnum, model from TMP_MPC where not (ram is null and mb is null)) mdl,(select row_number() OVER (ORDER BY ram) AS rnum, model, ram from TMP_MPC) rams,(select row_number() OVER (ORDER BY mb) AS rnum, model, mb from TMP_MPC) mbswhere mdl.rnum = rams.rnumand rams.rnum = mbs.rnumand mdl.model = 'x'; Izveidojam 3 kopas, ar vienādu ierakstu skaitu, pēdējās divas sakārtotas attiecīgi pēc ram un mb. Pēc tam ņemam pirmo kopu un pielasam klāt no pēdējām divām kopām ierakstu ar to pašu kārtas numuru. Kas ne gluži tā: 1. Rezultātā ir viena lieka rindiņa: 'x' null, null 2. Ja vispār nav neviena ram-a un neviena mb-a, tad rezultāta nebūs, bet tad tieši vajadzētu būt tam 'x' null null Link to comment Share on other sites More sharing options...
kazarma Oktobris 15, 2014 Author Share Oktobris 15, 2014 (labots) Ja kādam interesē rekur ir gala risinājums, lai dabūtu vēlamo outputu: Tāda sajūta ko šodien būšu apguvis diezgan daudz SQL..... with Model AS ( SELECT ROW_NUMBER() OVER (ORDER BY Model) AS RowNumber, Model FROM mypc WHERE model IS NOT NULL ), MB AS ( SELECT ROW_NUMBER() OVER (ORDER BY MB) AS RowNumber, MB FROM mypc WHERE MB IS NOT NULL ), RAM AS ( SELECT ROW_NUMBER() OVER (ORDER BY RAM) AS RowNumber, RAM FROM mypc WHERE RAM IS NOT NULL ), HDD AS ( SELECT ROW_NUMBER() OVER (ORDER BY HDD) AS RowNumber, HDD FROM mypc WHERE HDD IS NOT NULL ), CPU AS ( SELECT ROW_NUMBER() OVER (ORDER BY CPU) AS RowNumber, CPU FROM mypc WHERE CPU IS NOT NULL ), CDROM AS ( SELECT ROW_NUMBER() OVER (ORDER BY CDROM) AS RowNumber, CDROM FROM mypc WHERE CDROM IS NOT NULL ), GPU AS ( SELECT ROW_NUMBER() OVER (ORDER BY GPU) AS RowNumber, GPU FROM mypc WHERE GPU IS NOT NULL ), LAN AS ( SELECT ROW_NUMBER() OVER (ORDER BY LAN) AS RowNumber, LAN FROM mypc WHERE LAN IS NOT NULL ) SELECT model,mb,ram,hdd,cpu,cdrom,gpu,lan FROM Model LEFT JOIN MB ON Model.RowNumber = MB.RowNumber LEFT JOIN RAM ON Model.RowNumber = RAM.RowNumber LEFT JOIN hdd ON Model.RowNumber = hdd.RowNumber LEFT JOIN cpu ON Model.RowNumber = cpu.RowNumber LEFT JOIN cdrom ON Model.RowNumber = cdrom.RowNumber LEFT JOIN gpu ON Model.RowNumber = gpu.RowNumber LEFT JOIN lan ON Model.RowNumber = lan.RowNumber where mb is not null or ram is not null or hdd is not null or cpu is not null or cdrom is not null or gpu is not null or lan is not null Labots Oktobris 15, 2014 - kazarma Link to comment Share on other sites More sharing options...
ju Oktobris 15, 2014 Share Oktobris 15, 2014 Tev skriptā nav vairāk rindu kā datubāzē? Un jā, es tā arī īsti nesapratu, ko vēlies panākt. Link to comment Share on other sites More sharing options...
kazarma Oktobris 15, 2014 Author Share Oktobris 15, 2014 (labots) @Ju Tev taisnība, pirmo atlasi veic webaplikācija (select * into variable1 from variable2 where model='variable3') Pēc tam jau "mypc" vietā ir attiecīgais "variable2" un notiek tālākā sakārtošana. Pirmajā postā paskaties linkus ar bildēm. 1-links kā izskatījās tagad 2-links kā vajaga, lai izskatītos. Labots Oktobris 15, 2014 - kazarma Link to comment Share on other sites More sharing options...
Eric Oktobris 15, 2014 Share Oktobris 15, 2014 1. Sākotnējās datu struktūras ir kaut kādas dīvainas. Vai ar tām kko var iesākt? 2. Izmantot vairākus sql pieprasījumus, lai uzģenerētu vienu skatu nav nekāds kauns. Link to comment Share on other sites More sharing options...
festooo Janvāris 23, 2015 Share Janvāris 23, 2015 Kungi un dāmas!Palīdziet lūdzu uzrakstīt SQL vaicājumu, kas izgūs dažas kollonas no konkrētas tabulas, bet no visām sql datu bāzēm. Tādas ir daudzas datubāzes, kuās ir viena un tā pati tabula (protams ar citiem datu ierakstiem). Ja vēl rezultātā vienā no kolonām uzrādītos datu bāzes nosaukums, tad pie piektdienas prieks lielais būtu. Paldies Link to comment Share on other sites More sharing options...
Mezavecis Janvāris 23, 2015 Share Janvāris 23, 2015 Būtu labi pieminēt, kas tās pa "daudzām datu bāzēm", kādā vidē utt. Pagaidām no esošā apraksta pilnīgi nekādu SQL vaicājumu nevar uzrakstīt. Link to comment Share on other sites More sharing options...
festooo Janvāris 23, 2015 Share Janvāris 23, 2015 hmm.. SQL server 2008R2 domāju parastu vaicājumu ko palaist sql managament studio.tā ir datubāze speciālai programmai un daudzas ir tādēļ, ka katram klientam ir sava datu bāze. Tik tālu pats tiku: Select Code, Bezeichnung, Berichtstyp, PIDatum, PIZeit from S_Berichte where Berichtstyp=15 or Berichtstyp=17 Order by PIZeit DESC Tas ir tikai konkrētai datu bāzei, bet gribās lai atlase notiktu no visām un plus rezultātā lai varētu identificēt no kuras datu bāzes ieraksts ir nācis (respektīvi papildus kollona ar datu bāzes nosaukumu) Link to comment Share on other sites More sharing options...
Mezavecis Janvāris 23, 2015 Share Janvāris 23, 2015 Vispirms vajag pielinkot kādam serverim visas nepieciešamās datu bāzes un tad rakstīt pieprasījumu. Ja DB atrodas dažādās pasaules malās, tad pieprasījums izpildīsies nežēlīgi lēni, bet ja kāds no serveriem būs offline, tad nekas normāls nesanāks. Te piemērs, kā selektēt datus no vairākām DB. http://www.sqlteam.com/article/selecting-data-from-different-databases Ieteiktu tomēr salasīto rezultātu no katras DB ievietot katrā savā tabulā, vienā DB, un tad veidot pieprasījumu, lai cilvēcīgā termiņā varētu apstrādāt datus. Link to comment Share on other sites More sharing options...
festooo Janvāris 23, 2015 Share Janvāris 23, 2015 Ok, mēģināšu ko darīt. Visas datubāzes atrodas uz viena servers turklāt lokāli. Domāju, ka nevajadzētu būt problēmas ar ātrumu. Link to comment Share on other sites More sharing options...
Recommended Posts
Izveido kontu, vai pieraksties esošajā, lai komentētu
Jums ir jābūt šī foruma biedram, lai varētu komentēt tēmas
Izveidot jaunu kontu
Piereģistrējies un izveido jaunu kontu, tas būs viegli!
Reģistrēt jaunu kontuPierakstīties
Jums jau ir konts? Pierakstieties tajā šeit!
Pierakstīties tagad!