簡體   English   中英

T-SQL總和大小寫混淆

[英]T-SQL Sum Case Confusion

我目前正在做一個SUM CASE來鍛煉一個百分比,但是整個字符串都返回零或一(整數),但是我不知道為什么。 我已經編寫了SQL的各個部分,以進行細分,並確保基礎數據是正確的,但是當我添加最后一部分來執行百分比操作時,它會失敗。 我想念什么嗎?

SELECT 
    SUPPLIERCODE,
    (SUM(CASE WHEN ISNULL(DATESUBMITTED,0) - ISNULL(FAILDATE,0) <15 THEN 1 ELSE 0 END)) AS     ACCEPTABLE,
    COUNT(ID) AS TOTALSUBMITTED,
    (SUM(CASE WHEN ISNULL(DATESUBMITTED,0) - ISNULL(FAILDATE,0) <15 THEN 1 ELSE 0 END)/COUNT(ID))
FROM SUPPLIERDATA
GROUP BY SUPPLIERCODE

例如,以下是一些返回的數據:

SUPPLIERCODE    ACCEPTABLE  TOTALSUBMITTED  Column1
HBFDE2          1018        1045            0
DTETY1          4           4               1
SWYTR2          579         736             0
VFTEQ3          2104        2438            0

我知道我可以離開其他專欄並使用excel計算,但我寧願...任何幫助都將得到很好的接受。 謝謝

SELECT 
    SUPPLIERCODE,
    (SUM(CASE WHEN ISNULL(DATESUBMITTED,0) - ISNULL(FAILDATE,0) <15 THEN 1 ELSE 0 END)) AS     ACCEPTABLE,
    COUNT(ID) AS TOTALSUBMITTED,
    (SUM(CASE WHEN ISNULL(DATESUBMITTED,0) - ISNULL(FAILDATE,0) <15 THEN 1 ELSE 0 END)*1.0/COUNT(ID))
FROM SUPPLIERDATA
GROUP BY SUPPLIERCODE

您需要將結果轉換為float。 乘以1.0即可輕松完成

這是由於SQL Server為了分割的目的將您的值視為INT 嘗試以下操作,您將看到答案0

PRINT 1018 / 1045

為了使您的操作正常工作,您需要將值轉換為FLOAT ,如下所示:

PRINT CAST(1018 AS FLOAT) / 1045

這將產生預期的答案0.974163

對您的陳述進行簡單的更改以將演員表引入FLOAT解決您的問題:

SELECT 
    SUPPLIERCODE,
    (SUM(CASE WHEN ISNULL(DATESUBMITTED,0) - ISNULL(FAILDATE,0) <15 THEN 1 ELSE 0 END)) AS     ACCEPTABLE,
    COUNT(ID) AS TOTALSUBMITTED,
    (CAST(SUM(CASE WHEN ISNULL(DATESUBMITTED,0) - ISNULL(FAILDATE,0) <15 THEN 1 ELSE 0 END) AS FLOAT) / COUNT(ID))
FROM SUPPLIERDATA
GROUP BY SUPPLIERCODE

您要做的就是通過給數據庫引擎一個提示來避免整數除法。

在SQL Server中,您將使用:

SELECT 
    SUPPLIERCODE,
    (SUM(CASE WHEN ISNULL(DATESUBMITTED, 0) - ISNULL(FAILDATE, 0) < 15 THEN 1 ELSE 0 END)) AS ACCEPTABLE,
    COUNT(ID) AS TOTALSUBMITTED,
    (SUM(CASE WHEN ISNULL(DATESUBMITTED, 0) - ISNULL(FAILDATE, 0) < 15 THEN 1 ELSE 0 END) / (COUNT(ID) * 1.0))
FROM
    SUPPLIERDATA
GROUP BY
    SUPPLIERCODE 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM