2017-09-19 4 views
0

ここでは、ファンキーな丸めの問題があると思いますが、内部SQLの仕組みはわかりません。多分誰かが助けることができます。数値の割合を取得する

SELECT COUNT(Id) TotalReferrals, 
    SUM(CASE WHEN NHSCommunicationNeed1_Id IS NOT NULL THEN 1 ELSE 0 END) NHSCommNeed1Total, 
    SUM(CASE WHEN NHSCommunicationNeed2_Id IS NOT NULL THEN 1 ELSE 0 END) NHSCommNeed2Total, 
    SUM(CASE WHEN NHSCommunicationNeed3_Id IS NOT NULL THEN 1 ELSE 0 END) 
    NHSCommNeed3Total 
    INTO #Totals 
    FROM DDS.Referrals 

は、以下の結果は、私がこれを行うときに

SELECT 
    SUM((NHSCommNeed1Total/TotalReferrals) * 100) NHSCommNeed1Percent, 
    SUM((NHSCommNeed2Total/TotalReferrals) * 100) NHSCommNeed2Percent, 
    SUM((NHSCommNeed3Total/TotalReferrals) * 100) NHSCommNeed3Percent 
FROM #Totals 

が、私はこれを取得

TotalReferrals NHSCommNeed1Total NHSCommNeed2Total NHSCommNeed3Total 
1008   1008    508     508 

を設定する私を与えますか? NHSCommNeed1Total/(TotalReferralsの結果は整数として計算され

NHSCommNeed1Percent NHSCommNeed2Percent NHSCommNeed3Percent 
100     0     0 

答えて

2

を誰かが何が起こっているかを説明することができますし、私はそれをどのように修正すればよいので、それはちょうどそれを掛けDECIMALまたはダブル作る適用するには0に終わります1.0と:

SELECT 
    SUM((NHSCommNeed1Total/(TotalReferrals * 1.0)) * 100) NHSCommNeed1Percent, 
    SUM((NHSCommNeed2Total/(TotalReferrals * 1.0)) * 100) NHSCommNeed2Percent, 
    SUM((NHSCommNeed3Total/(TotalReferrals * 1.0)) * 100) AS NHSCommNeed3Percent 
FROM #Totals 

はい確かに、二つの文の必要は、あなたが使用することはできませんINSERT INTO SELECT

WITH CTE 
AS 
(
    SELECT COUNT(Id) TotalReferrals, 
     SUM(CASE WHEN NHSCommunicationNeed1_Id IS NOT NULL THEN 1.0 ELSE 0 END) NHSCommNeed1Total, 
     SUM(CASE WHEN NHSCommunicationNeed2_Id IS NOT NULL THEN 1.0 ELSE 0 END) NHSCommNeed2Total, 
     SUM(CASE WHEN NHSCommunicationNeed3_Id IS NOT NULL THEN 1.0 ELSE 0 END) 
     NHSCommNeed3Total 
     FROM DDS.Referrals 
) 
INSERT INTO SomeOtherTable(NHSCommNeed1Total,NHSCommNeed2Total ,NHSCommNeed3Total) 
SELECT 
    SUM((NHSCommNeed1Total/(TotalReferrals * 1.0)) * 100) AS NHSCommNeed1Percent, 
    SUM((NHSCommNeed2Total/(TotalReferrals * 1.0)) * 100) NHSCommNeed2Percent, 
    SUM((NHSCommNeed3Total/(TotalReferrals * 1.0)) * 100) AS NHSCommNeed3Percent 
FROM CTE; 
+0

おかげで動作するはずです。 #totalsに挿入してDDS.Referralsをクエリする必要はありません。 –

+0

これらを挿入する代わりに、最初のクエリを別のselectでラップし、そこに集約します。 @BenDonnelly – sagi

+0

代わりに、 'CASE'式で' THEN 1.0 ELSE 0 END'を修正することができます。 –

0

あなたがすべて1つのステートメントで必要な場合、これは

SELECT 
SUM(CASE WHEN NHSCommunicationNeed1_Id IS NOT NULL THEN 1.0 ELSE 0.0 END)/COUNT(Id) as NHSCommNeed1Percent, 
SUM(CASE WHEN NHSCommunicationNeed2_Id IS NOT NULL THEN 1.0 ELSE 0.0 END)/COUNT(Id) as NHSCommNeed2Percent, 
SUM(CASE WHEN NHSCommunicationNeed3_Id IS NOT NULL THEN 1.0 ELSE 0.0 END)/COUNT(Id) as NHSCommNeed3Percent 
FROM DDS.Referrals 
関連する問題