MS SQL无法运行 - 正确的语法?

时间:2011-03-30 11:37:03

标签: sql sql-server

我有一个运行大量SQL文件的PHP应用程序。它成功运行所有这些,除了这个返回结果“1”作为对象数组。这个sql有语法问题吗?

set datefirst 1;

select  top 10 artistlabel_name
        , album_name
        , releasedate
        , label
        , sum(units) total_units
        , sum(sales) total_sales 
from    (
          select  c.[name] album_name
                  , isnull(d.[name]
                  , e.[name]) artistlabel_name
                  , c.releasedate
                  , e.[name] label
                  , sum(b.price) sales
                  , count(b.Id) units 
          from    [order] a 
                  left join orderalbum b on b.orderId = a.Id
                  left join album c on b.albumId = c.Id
                  left join label e on c.labelId = e.Id
                  left outer join artist d on c.artistId = d.Id
          where   a.successful=1
                  and datepart(ww, a.OrderDate) = datepart(ww, getDate())-1
                  and datepart(yyyy, a.OrderDate) = datepart(yyyy, getDate())
          group by 
                  c.[name]
                  , isnull(d.[name], ,e.[name])
                  , c.releasedate
                  , e.[name]
          union
          select  e.[name] album_name
                  , isnull(d.[name], f.[name]) artistlabel_name
                  , e.releasedate
                  , f.[name] label
                  , sum(b.price) sales
                  , count(b.Id) units 
          from    [order] a left join orderalbum b on b.orderId = a.Id
                  left join albumvariant c on b.albumvariantId = c.Id
                  left join album e on c.albumId = e.Id
                  left join label f on e.labelId = f.Id
                  left outer join artist d on e.artistId = d.Id
          where   a.successful=1
                  and datepart(ww, a.OrderDate) = datepart(ww, getDate())-1
                  and datepart(yyyy, a.OrderDate) = datepart(yyyy, getDate())
          group by 
                  e.[name]
                  , isnull(d.[name], f.[name])
                  , e.releasedate
                  , f.[name]
        ) x
group by 
        x.album_name, 
        x.artistlabel_name, 
        x.releasedate, 
        x.label
having  sum(x.sales) > 0 
        and album_name is not null
order by 
        total_units desc;

希望那里有一个可以帮助我的MSSQL忍者。

3 个答案:

答案 0 :(得分:3)

我想这个查询会返回两个结果集,第一个来自set datefirst 1;,然后是第二个。

阅读PHP应用程序中的第二个结果集。

http://php.net/manual/en/function.mssql-next-result.php

答案 1 :(得分:0)

在我看来,像ta.speot.is有答案。但是,您需要小心WHERE子句中的日期,特别是如果GetDate()落在一年的第一周。

答案 2 :(得分:-1)

注意:没有阅读/尝试过您的脚本

如果您使用的是MS SQL Server,则可以在Management Studio中输入此查询并让其进行验证。该按钮在“新查询”窗口中可用。这样你就可以检查语法是否正常。 如果语法是正确的,那么查询和它中的多个连接可能是一个问题,但是如果不知道表结构和数据(imo)就很难说出来。