【问题标题】:MS SQL returning wrong result when executed in asp在 asp 中执行时 MS SQL 返回错误的结果
【发布时间】:2012-08-10 23:55:20
【问题描述】:

我在经典 ASP 中使用的 MS SQL 语句遇到了一些问题。 当我在 Microsoft SQL SMS 中使用该语句时 - 我得到了正确的答案 (4) 但在 ASP 中我只得到了结果 2..

我想要的结果是有多少不同的艺术家拥有一个或多个已发布的项目。

我使用的语句 -

SELECT Count(*) AS CountArtists 
FROM Tekster 
WHERE Published='True' 
GROUP BY Artist  

数据 - 表格(文本)

Artist    -   Published  
Person1       yes  
Person1       no  
Person1       yes  
Person2       yes  
Person3       yes  
Person3       no  
Person3       yes  
Person4       no  
Person4       no  
Person4       no  
Person5       no  
Person5       yes  
Person6       no  

【问题讨论】:

    标签: sql select count group-by


    【解决方案1】:

    确保两个查询的连接字符串相同。您访问的数据库可能与您认为的不同。

    另外,请注意您的查询正在检查True,但您的数据显示yes/no。是哪个?

    【讨论】:

      【解决方案2】:

      当数据包含“是”和“否”时,为什么要说“已发布 = 'true'”。

      尝试使用 published = 'yes' 运行查询。

      另外,如果你想要数值 4,那么你应该使用 "count(distinct artist)" 而不是 count(*)。

      【讨论】:

        【解决方案3】:

        如果您修复了where 子句,您的原始查询将为您提供每个艺术家的表中published 为yes|true 的所有行的计数。您可能会得到一些零值。

        要获得您想要的结果并回答“有多少不同的艺术家拥有一个或多个已发布项目?”的问题,您需要执行以下操作:

        select count(*)
        from ( select artist
               from Tekster
               where published = 'yes'
               group by artist
               having count(*) > 1
             ) published_artist pa
        

        虚拟表(子查询)为您提供一组已发布的艺术家。外部查询为您提供已发布艺术家的数量。

        【讨论】:

          【解决方案4】:

          SELECT COUNT(DISTINCT Artist) AS CountArtists FROM Tekster WHERE Published='True'

          【讨论】:

          • 非常感谢 - 这正是我正在寻找的正确声明 :-)
          【解决方案5】:

          如果已发布字段数据类型为位,则使用已发布 = 1

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-02-06
            相关资源
            最近更新 更多