2012-11-16 47 views
5

मैं निम्न तालिका के साथ SQLServer 2008 को काम कर रहा हूँ:रकम के संघ में दशमलव दौर?

id  user  program seconds 
------------------------------------ 
9999 'user01' 'pr01'  5 

स्तंभ 'सेकंड' एक दशमलव (14,0) और तालिका में केवल पंक्ति के रूप में परिभाषित किया गया है दिखाया गया है।

तो मैं कुछ प्रश्नों के लिए प्रयास करें:

Q1:

select seconds*0.95 from myTable 
union all 
select seconds from myTable 

यह परिणाम मैं उम्मीद देता है:

4.75 
5.00 

Q2:

select sum(seconds)*0.95 from myTable 
union all 
select sum(seconds) from myTable 

मैं उम्मीद कर रहा था क्यू 1 के रूप में एक ही परिणाम लेकिन resu lt मैं हो जाता है:

5 
5 

Q3:

select sum(seconds)*0.95 from myTable 
union all 
select sum(seconds)*1.00 from myTable 

इस मामले में मैं परिणाम मैं उम्मीद हो:

4.75 
5.00 

तो, मैं जानना चाहता है कि Q2 हो रही नहीं है चाहते हैं अपेक्षित परिणाम। मैंने एक ही उदाहरण को 'सेकेंड' दशमलव (2,0) के साथ करने का प्रयास किया है और ठीक काम करता है इसलिए मुझे लगता है कि इसमें दशमलव के आकार के साथ कुछ करना है, लेकिन उस स्थिति में मुझे पता नहीं चल सकता कि Q1 और Q3 क्यों काम करते हैं जबकि क्यू 2 नहीं करता है।

+0

मैं दशमलव (2,0) के साथ वापस प्रयास कर रहा हूं और यह –

उत्तर

4

sum(seconds) का परिणाम numeric(38,0) जो समझ में आता है के रूप में आप numeric(14,0) पंक्तियों के किसी भी संख्या संक्षेप किया जा सकता है और यह एक छोटे प्रकार बह निकला टाल है।

गुणा एक 0.95 (numeric(2,2)) शीर्ष भाग में से numeric(38,0)explanation here अनुसार numeric(38,2) का एक परिणाम देता है।

लेकिन union के निचले हिस्से numeric(38,0) इसलिए परिणाम के रूप में एक पूरी numeric(38,0) को डाला जाता है जो फिर से समझ में आता है के रूप में numeric(38,2) हमेशा numeric(38,0) को त्रुटि के बिना (हालांकि दशमलव के बाद अंक के नुकसान के साथ) डाल सकता लेकिन कास्टिंग है अन्य तरीकों से बहुत बड़ी संख्या में काम नहीं करेगा।

इससे बचने के लिए आप नीचे भाग को स्पष्ट रूप से numeric(38,2) पर डाल सकते हैं।

SELECT sum(seconds) * 0.95 AS S 
FROM myTable 
UNION ALL 
SELECT CAST(sum(seconds) AS NUMERIC(38, 2)) 
FROM myTable 
+0

काम करने के लिए प्रतीत नहीं होता है। मैं अब समझता हूँ :) –