SQL Server的语法无效

时间:2015-09-23 20:36:14

标签: sql sql-server-2008 subquery syntax-error

我正在尝试在SQL Server中执行以下查询,但它正在抛出错误。我该如何解决?

select 
    T.T_Email
from 
    Stu_Question S, Tutor_Answer T
where 
    S.S_Quest_Id = '4f7a1518-a765-40c0-ae53-3ee61eef6673' 
    and S.S_Quest_Id = T.S_Quest_Id 
    and (T_Email,T_Answer_Update_Status) 
        IN (T_Email, Select MAX(T_Answer_Update_Status) 
                     from Tutor_Answer 
                     where S_Quest_Id='4f7a1518-a765-40c0-ae53-3ee61eef6673' 
                     group by T_Email)
    and S.S_Quest_Update_Status = (Select MAX(S_Quest_Update_Status) 
                                   from Stu_Question 
                                   where S_Quest_Id='4f7a1518-a765-40c0-ae53-3ee61eef6673')   

2 个答案:

答案 0 :(得分:4)

这是你陈述中令人不快的部分:

// this array is necessary for generating links
    var ids = [
        @foreach($user->frontline as $person)
            {
                id: {{ $person->id }},
                label: "{{ $person->full_name }}",
                value: {{ $person->business_month_volume }},
                tooltipTemplate: " <%if (segmentLabel){%><%=segmentLabel%>: <%}%><%= numeral(value).format('($0,0[.]00)') %> - <%= numeral(circumference / 6.283).format('(0[.][00]%)') %>"
            },
        @endforeach
    ];

    // pie chart
    var data = [
        @foreach($user->frontline as $person)
            {
                id: {{ $person->id }},
                value: {{ $person->business_year_volume }},
                color: "{{ $colors[$index]['primary'] }}",
                highlight: "{{ $colors[$index]['highlight'] }}",
                label: "{{ $person->full_name }}",
                labelColor: "black",
                labelFontSize: '16px',
                segmentLabel: '16px'
            },
            <?php
                if($index < count($colors) -1) $index ++;
                else $index = 0;
            ?>
        @endforeach
    ];

你到底想做什么?

T-SQL的and (T_Email,T_Answer_Update_Status) IN (T_Email, Select MAX(T_Answer_Update_Status) from Tutor_Answer where S_Quest_Id='4f7a1518-a765-40c0-ae53-3ee61eef6673' group by T_Email) 运算符一次只能处理一个列 - 如下所示:

IN

答案 1 :(得分:1)

marc_s正确地指出了您查询的违规部分。

您必须尝试将其转换为联接。我将如何做到这一点:

select T.T_Email
  from Stu_Question S
  join (select T_Email, 
               row_number() over (partition by S_Quest_Id order by S_Quest_Update_Status desc) as rn
          from Tutor_Answer) T
    on T.S_Quest_Id=S.S_Quest_Id 
   and T.rn = 1
 where S.S_Quest_Id='4f7a1518-a765-40c0-ae53-3ee61eef6673'
   AND S.S_Quest_Update_Status=(Select MAX(S_Quest_Update_Status)
                                 from Stu_Question 
                                where S_Quest_Id='4f7a1518-a765-40c0-ae53-3ee61eef6673')

请注意,您肯定可以进一步改善这一点。但它应该让你去。