0

我有以下查询:

insert into [MyDB].[dbo].[Reports_ActivityStat] (ActivityID,TaskID,LS_HowOthersAnswered,LS_ImproveMyChances)
(
SELECT
ActivityID=tasks.ActivityID,
TaskID=tasks.ID,
CAST(
        CASE 
            WHEN CHARINDEX('stats',item.value('(UsedLifeSavers)[1]', 'NVARCHAR(MAX)'))>0
                THEN 1 
            ELSE 0 
        END AS bit) as LS_HowOthersAnswered,
CAST(
        CASE 
            WHEN CHARINDEX('FiftyFifty',item.value('(UsedLifeSavers)[1]', 'NVARCHAR(MAX)'))>0
                THEN 1 
            ELSE 0 
        END AS bit) as LS_ImproveMyChances

FROM  [MyDB].[dbo].[Tasks] as tasks CROSS APPLY [Progress].nodes ('//Progress/Steps/ProgressStep') Progress(item)
)  

它作用于下Tasks表:

 ID  |   ActivityID    |      Progress  
  1  |        1        |  [example below..]  
  2  |        1        |  [example below..]

Progress这样的xml 在哪里:

<Progress xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
  <Steps>
    <ProgressStep>
      <FinishedOn>2012-10-30T13:07:52.6374861+02:00</FinishedOn>
      <Score>0</Score>
      <StartedOn>2012-10-30T13:07:45.8234861+02:00</StartedOn>
      <Status>Finished</Status>
      <StepIndex>0</StepIndex>
      <StepType>Summary</StepType>
      <UsedLifeSavers xmlns:a="http://schemas.datacontract.org/2004/07/MindLab.Logic.Study" />
    </ProgressStep>
    <ProgressStep>
      <FinishedOn i:nil="true" />
      <PartNumber>1</PartNumber>
      <Score>0</Score>
      <StartedOn>2012-10-30T13:07:52.6374861+02:00</StartedOn>
      <Status>NotFinished</Status>
      <StepIndex>1</StepIndex>
      <StepType>Information</StepType>
      <SubmittedAnswersCount>0</SubmittedAnswersCount>
      <UsedLifeSavers xmlns:a="http://schemas.datacontract.org/2004/07/MindLab.Logic.Study">
        <a:LifeSavers>Stats</a:LifeSavers>
        <a:LifeSavers>FiftyFifty</a:LifeSavers>
      </UsedLifeSavers>
    </ProgressStep>  
  </Steps>
</Progress>  

(通常有超过 2 个步骤..)

我的查询产生(不是实际数据,只是样本):

 ID  |   ActivityID    |   TaskID   |    LS_HowOthersAnswered   |   LS_ImproveMyChances
  1  |        1        |      1     |             0             |             0
  2  |        1        |      1     |             1             |             0  
  3  |        1        |      1     |             0             |             0    

这几乎是我需要的,但不完全是。
我需要所有唯一的SUMTaskIDLS_HowOthersAnsweredLS_ImproveMyChances.
我试图分组,但没能成功,因为这与常规的内部连接太不同了..

4

1 回答 1

0

发现:

insert into [MyDB].[dbo].[Reports_ActivityStat] (ActivityID,TaskID,LS_HowOthersAnswered,LS_ImproveMyChances)
(
SELECT
ActivityID=tasks.ActivityID,
TaskID=tasks.ID,    
SUM (CAST(
        CASE 
            WHEN CHARINDEX('stats',item.value('(UsedLifeSavers)[1]', 'NVARCHAR(MAX)'))>0
                THEN 1 
            ELSE 0 
        END AS int)
        ),

SUM (CAST(
        CASE 
            WHEN CHARINDEX('FiftyFifty',item.value('(UsedLifeSavers)[1]', 'NVARCHAR(MAX)'))>0
                THEN 1 
            ELSE 0 
        END AS int)
        )  

FROM  [MyDB].[dbo].[Tasks] as tasks CROSS APPLY [Progress].nodes ('//Progress/Steps/ProgressStep') Progress(item)
group by tasks.ID
)
于 2012-11-06T11:31:12.350 回答