Vinnaren i pepparkakshustävlingen!
2015-10-28, 08:42
  #1
Medlem
Biggless avatar
Hej


Jag har ett problem där jag har en tabell som måste kallas två gånger i samma fråga då det är en "Person" tabell och både mina kunder och medarbetares kontaktuppgifter finns i denna tabellen.

Kod:
Select 
    CRM7
.contact.contact_id as CustomerID
    
CRM7.contact.name ' ' CRM7.person.firstname ' ' CRM7.person.LASTNAME as CustomerName
    
CRM7.person.firstname ' ' CRM7.person.lastname as ConsultantName,
    
CRM7.udcontactsmall.long08 as WriteLic
    
CRM7.udcontactsmall.long17 as ReadLic
    
CRM7.udcontactsmall.long09 as HasMaint
    
CRM7.udlist.name as BCVer 
from 
    CRM7
.contact,
    
CRM7.udcontactsmall 
left join 
    CRM7
.associate on CRM7.udcontactsmall.long11 CRM7.associate.associate_id 
left join 
    CRM7
.person on CRM7.associate.person_id CRM7.person.person_id 
left join 
    CRM7
.udlist on CRM7.udcontactsmall.long07 CRM7.udlist.UDList_id 
where 
    CRM7
.contact.category_idx '2' and
    
CRM7.contact.userdef_id CRM7.udcontactsmall.udcontactsmall_id
order by 
    CRM7
.contact.name 


I selecten så kallas
Kod:
CRM7.person.firstname ' ' CRM7.person.lastname as ConsultantName

Som är konsulten för kunden ifråga. Men jag skulle vilja i samma fråga göra denna fråga:


Kod:
SELECT  
    P
.FIRSTNAME+' '+P.LASTNAME AS CONTACT
FROM 
    CRM7
.PERSON P
LEFT OUTER JOIN 
    CRM7
.CONTACT C ON P.CONTACT_ID C.CONTACT_ID
WHERE 
    C
.CATEGORY_IDX IN ('2','5'
    AND 
P.RETIRED 0  
ORDER BY 
    P
.LASTNAMEP.FIRSTNAME 

Som ger kund resultaten.


Hur går jag tillväga för att göra detta?


Datat som kommer från båda frågorna ser ut såhär:

http://oi61.tinypic.com/2j66cjq.jpg
Citera
2015-10-28, 11:51
  #2
Moderator
Protons avatar
Citat:
Ursprungligen postat av Biggles
Hej


Jag har ett problem där jag har en tabell som måste kallas två gånger i samma fråga då det är en "Person" tabell och både mina kunder och medarbetares kontaktuppgifter finns i denna tabellen.

Kod:
Select 
    CRM7
.contact.contact_id as CustomerID
    
CRM7.contact.name ' ' CRM7.person.firstname ' ' CRM7.person.LASTNAME as CustomerName
    
CRM7.person.firstname ' ' CRM7.person.lastname as ConsultantName,
    
CRM7.udcontactsmall.long08 as WriteLic
    
CRM7.udcontactsmall.long17 as ReadLic
    
CRM7.udcontactsmall.long09 as HasMaint
    
CRM7.udlist.name as BCVer 
from 
    CRM7
.contact,
    
CRM7.udcontactsmall 
left join 
    CRM7
.associate on CRM7.udcontactsmall.long11 CRM7.associate.associate_id 
left join 
    CRM7
.person on CRM7.associate.person_id CRM7.person.person_id 
left join 
    CRM7
.udlist on CRM7.udcontactsmall.long07 CRM7.udlist.UDList_id 
where 
    CRM7
.contact.category_idx '2' and
    
CRM7.contact.userdef_id CRM7.udcontactsmall.udcontactsmall_id
order by 
    CRM7
.contact.name 


I selecten så kallas
Kod:
CRM7.person.firstname ' ' CRM7.person.lastname as ConsultantName

Som är konsulten för kunden ifråga. Men jag skulle vilja i samma fråga göra denna fråga:


Kod:
SELECT  
    P
.FIRSTNAME+' '+P.LASTNAME AS CONTACT
FROM 
    CRM7
.PERSON P
LEFT OUTER JOIN 
    CRM7
.CONTACT C ON P.CONTACT_ID C.CONTACT_ID
WHERE 
    C
.CATEGORY_IDX IN ('2','5'
    AND 
P.RETIRED 0  
ORDER BY 
    P
.LASTNAMEP.FIRSTNAME 

Som ger kund resultaten.


Hur går jag tillväga för att göra detta?


Datat som kommer från båda frågorna ser ut såhär:

http://oi61.tinypic.com/2j66cjq.jpg
Som din andra fråga är ställd nu kommer du inte kunna få in den i samma resultat, hade svaren på frågorna sett likadana ut hade det däremot varit simpelt att få till det med en UNION (om jag förstått det hela rätt).

En sådan förrutsätter dock att resultaten ser likadana ut, beträffande fältlängder och datatyper. Du kan ju annars fylla ut det du inte vill ha med NULL.
Citera
2015-10-28, 12:15
  #3
Medlem
Biggless avatar
Citat:
Ursprungligen postat av Proton
Som din andra fråga är ställd nu kommer du inte kunna få in den i samma resultat, hade svaren på frågorna sett likadana ut hade det däremot varit simpelt att få till det med en UNION (om jag förstått det hela rätt).

En sådan förrutsätter dock att resultaten ser likadana ut, beträffande fältlängder och datatyper. Du kan ju annars fylla ut det du inte vill ha med NULL.



Skulle de fungera om jag skulle vilja få Kontaktpersonen i en egen column ?
Citera
2015-10-28, 12:41
  #4
Moderator
Protons avatar
Citat:
Ursprungligen postat av Biggles
Skulle de fungera om jag skulle vilja få Kontaktpersonen i en egen column ?
Nej, en union kommer göra att träffarna hamnar under varandra, en join kommer göra att du får nya kolumner.
Citera
2015-10-28, 13:13
  #5
Medlem
Biggless avatar
Problemet är att om man gör en join så blir de samma information som i ConsultantName


Kod:
LEFT OUTER JOIN 
    
(SELECT CONTACT_IDNAME 
     FROM CRM7
.CONTACT 
     WHERE CATEGORY_IDX IN 
('2','5') AND ) C ON CRM7.person.CONTACT_ID C.CONTACT_ID 


Så förstår inte riktigt om det ens går att få fram separat information då jag redan använder mig av CRM7.Contact tabellen en gång
Citera
2015-10-28, 14:19
  #6
Moderator
Protons avatar
Citat:
Ursprungligen postat av Biggles
Problemet är att om man gör en join så blir de samma information som i ConsultantName


Kod:
LEFT OUTER JOIN 
    
(SELECT CONTACT_IDNAME 
     FROM CRM7
.CONTACT 
     WHERE CATEGORY_IDX IN 
('2','5') AND ) C ON CRM7.person.CONTACT_ID C.CONTACT_ID 


Så förstår inte riktigt om det ens går att få fram separat information då jag redan använder mig av CRM7.Contact tabellen en gång
Problemet är ju att resultatet i den vänstra mängden innehåller färre rader än den i den högra rimligen, eftersom du i den högra vill ha ut fler kategorier än i den vänstra.

Så, om du byter ut din LEFT OUTER JOIN mot en RIGHT OUTER JOIN borde det lösa problemet, då kommer du även få ut de kontakter som inte går att matcha mot något i den vänstra delen.
Citera
2015-10-28, 14:28
  #7
Medlem
Biggless avatar
Citat:
Ursprungligen postat av Proton
Problemet är ju att resultatet i den vänstra mängden innehåller färre rader än den i den högra rimligen, eftersom du i den högra vill ha ut fler kategorier än i den vänstra.

Så, om du byter ut din LEFT OUTER JOIN mot en RIGHT OUTER JOIN borde det lösa problemet, då kommer du även få ut de kontakter som inte går att matcha mot något i den vänstra delen.


Ja precis det låter som det jag vill ha. Men testade det innan och fick inga resultat alls då från queryn.
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