2010-05-21 4 views
0

Je ne suis pas sûr de savoir comment décrire au mieux ce que je suis en train de faire (ou la rechercher d'ailleurs) mais je vais essayer.sql requête pour retourner des éléments basés sur le texte et le groupe ID

J'ai une requête préexistante (procédure stockée) qui renvoie des éléments basés sur 3 ID spécifiques. Ce que je veux faire est d'être capable de réduire encore les résultats basés sur une colonne dans les résultats ayant exactement la même chaîne. Je souhaite que la requête renvoie le nombre d'éléments dans lesquels une colonne donnée contient exactement les mêmes valeurs.

Pour une raison quelconque, je suis confus sur la façon de faire cela, je dessine un vide complet à ce sujet.

Voici un échantillon des données actuelles:

PROGRAMID DAY TIMESLOT   SlotInfoDescription TITLE 
2688   4 13:00-16:30  Free Time    NULL 
2688   4 16:30-17:10  NULL     Joint Session with Search Engines: Machine Learning for Social Media Analytics 
2689   4 13:10-16:00  Free Time    NULL 
2689   4 16:30-17:10  NULL     Joint Session with Search Engines: Machine Learning for Social Media Analytics 
2300   4 12:00-13:30  Free Time 
2300   4 16:30-17:10  NULL     Joint Session with Search Engines: Machine Learning for Social Media Analytics 

Voici les résultats que je veux (basé sur le titre étant la même):

count = 1 

Voici la requête en cours:

SELECT 
    WS.PROGRAMID, 
    WS.ITEMID, 
    WS.DAY, 
    CASE datepart(weekday, dateadd(day, WS.DAY - 1, WE.EVENTSTARTDATE)) 
     WHEN 1 THEN 'Sun' 
     WHEN 2 THEN 'Mon' 
     WHEN 3 THEN 'Tue' 
     WHEN 4 THEN 'Wed' 
     WHEN 5 THEN 'Thu' 
     WHEN 6 THEN 'Fri' 
     WHEN 7 THEN 'Sat' 
     ELSE 'N/A' 
    END 
    + ' ' + Convert(char(12), dateadd(day, WS.DAY - 1, WE.EVENTSTARTDATE), 101) as Date, 
    WS.TIMESLOT, 
    WS.SLOTTYPE, 
    WSSTC.DESCRIPTION AS SlotTypeDescription, 
    WS.SLOTINFO, 
    WSSIC.DESCRIPTION AS SlotInfoDescription, 
    ISNULL(WSI.TALKID, 0) AS TalkID, 
    LEFT(WPI.FIRSTNAME, 10) + ' ' + LEFT(WPI.LASTNAME, 10) + ' (' + LEFT(WEA.INSTITUTION, 10) + ')' + ' - ' + LEFT(WSI.TITLE, 10) + '...' + RIGHT(WSI.TITLE, 10) AS Talk, 
    WPI.FIRSTNAME, 
    WPI.LASTNAME, 
    WEA.INSTITUTION, 
    WSI.AUTHORLINE, 
    WSI.TITLE, 
    LEFT(WSI.ABSTRACT, 1) AS Abstract, 
    WS.LOCATION, 
    WS.ADDENDUM 
FROM 
    DBO.WEBSPEAKERINFO WSI 
    INNER JOIN 
     DBO.WEBPERSONALINFO WPI 
     ON 
      WSI.USERID = WPI.USERID 
    INNER JOIN 
     DBO.WEBEVENTAFFILIATION WEA 
     ON 
      WPI.USERID = WEA.USERID 
      AND 
      WEA.EVENTID IN @EVENTID 
    RIGHT OUTER JOIN 
     DBO.WEBSCHEDULESLOTTYPECODES WSSTC 
    RIGHT OUTER JOIN 
     DBO.WEBSCHEDULES WS 
     ON 
      WSSTC.SLOTTYPE = WS.SLOTTYPE 
     ON 
      WSI.TALKID = WS.TALKID 
    LEFT OUTER JOIN 
     DBO.WEBSCHEDULESLOTINFOCODES WSSIC 
     ON 
      WS.SLOTINFO = WSSIC.SLOTINFO 
    INNER JOIN 
     DBO.WEBEVENTS WE 
     ON 
      WE.EVENTID IN @EVENTID 
WHERE 
    WS.PROGRAMID IN @EVENTID 
    AND 
    WS.DAY = @DAY 
ORDER BY 
    DAY, 
    TIMESLOT 
+3

s'il vous plaît fournir un échantillon des données, la sortie de courant et la sortie désirée. – akf

Répondre

1

En supposant que vous utilisez SQL Server. puisque vous savez quelles colonnes vos déclarations de procédure stockée, vous pouvez le faire:

create #tempTable (columnsSprocReturns) 
insert into #tempTable 
exec yourSproc 

select columns 
from #tempTable 
where someColumn = 'someValue' 

drop table #tempTable 
+0

Je vais essayer cela, qu'est-ce que columnSprocReturns utilisé pour – mattgcon

+0

la table temporaire devrait avoir les mêmes types de colonnes que vos retours de sproc. quelque chose comme (id int, col1 varchar (20)) etc. ils doivent correspondre à la longueur du type de données. –

+0

Oh ok gotcha. Mais une chose que je dois mentionner la clause where ('someValue') n'est pas une donnée, je dois trouver où ils correspondent – mattgcon

Questions connexes