2010-05-21 48 views
0

我不确定如何最好地描述我正在尝试做什么(或为此寻找它),但我会尝试。sql查询根据文本和组ID返回项目

我有一个预先存在的查询(存储过程),基于3个特定的ID返回项目。我想要做的是能够根据结果中具有完全相同字符串的列进一步减少结果。我希望查询返回特定列中具有完全相同值的项目的计数。

出于某种原因,我对如何做到这一点感到困惑,我正在对此做一个完整的空白。

在这里,当前数据的一个示例:

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 

下面是我想要的结果(基于名称是相同的):

count = 1 

这里是当前查询:

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

请提供数据的样本,输出电流,所需的输出。 – akf 2010-05-21 23:24:36

回答

1

假设您正在使用SQL Server。 因为你知道你可以做到这一点哪些列的存储过程返回:

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

select columns 
from #tempTable 
where someColumn = 'someValue' 

drop table #tempTable 
+0

我会尝试一下,columnSprocReturns用于 – mattgcon 2010-05-21 23:51:54

+0

临时表的列应该与您的sproc返回的列类型相同。像(id int,col1 varchar(20))等等,它们必须匹配到数据类型的长度。 – 2010-05-21 23:58:49

+0

哦,确定了。但有一点我不得不提到where子句('someValue')是不是给定的,我需要找出它们匹配的地方 – mattgcon 2010-05-22 00:09:36