2009-12-08 13 views
5

मेरे पास एमएस एक्सेस में एक क्वेरी है जो दो सबक्वायरीज़ से एक टेबल बनाती है। दो कॉलम बनाए जाने के लिए, मैं पहले सबक्वायरी से एक कॉलम को दूसरे सबक्वायरी से कॉलम में विभाजित कर रहा हूं।एमएस एक्सेस में डेटाटाइप को मजबूर करना टेबल क्वेरी

पहले कॉलम का डेटाटाइप एक डबल है; दूसरे कॉलम का डेटाटाइप दशमलव है, 2 के पैमाने के साथ, लेकिन मैं चाहता हूं कि दूसरा कॉलम डबल भी हो।

मानक मेक-टेबल एक्सेस क्वेरी के माध्यम से तालिका बनाते समय डेटाटाइप को मजबूर करने का कोई तरीका है?

+0

क्या आप SQL कथन पोस्ट कर सकते हैं, कृपया? मूल कथन हमारे द्वारा उत्तर देने के तरीके को प्रभावित करेगा। – Rap

उत्तर

8

ऐसा करने का एक तरीका यह है कि इसमें कुछ भी डालने से पहले टेबल को स्पष्ट रूप से बनाएं।

आपके मौजूदा बयान शायद इस तरह है:

SELECT Persons.LastName,Orders.OrderNo 
INTO Persons_Order_Backup 
FROM Persons 
INNER JOIN Orders 
ON Persons.P_Id=Orders.P_Id 
WHERE FirstName = 'Alistair' 

लेकिन क्या आप भी ऐसा कर सकते हैं: आप स्तंभ प्रकार पर पूर्ण नियंत्रण होता

----Create NewTable 
CREATE TABLE NewTable(FirstName VARCHAR(100), LastName VARCHAR(100), Total DOUBLE) 
----INSERT INTO NewTableusing SELECT 
INSERT INTO NewTable(FirstName, LastName, Total) 
SELECT FirstName, LastName, 
FROM Person p 
INNER JOIN Orders o 
ON p.P_Id = o.P_Id 
WHERE p.FirstName = 'Alistair' 

इस तरह। यदि आपको इसे फिर से बनाने की आवश्यकता है तो आप बाद में तालिका को हमेशा छोड़ सकते हैं।

+3

मुझे लगता है कि यह करने के लिए * केवल * तरीका है, मेकटेबल रन के बाद डेटा प्रकारों को बदलने के अलावा। –

0

आप कॉलम के चारों ओर CDbl का उपयोग कर सकते हैं।

+0

@onedayone सही नहीं है कि सीडीबीएल() नल को संभाल नहीं पाएगा, इसलिए आपको इसे संभालने की ज़रूरत है, जैसा कि उसने सुझाव दिया है? –

+0

फिर आप केवल आईआईएफ नहीं, बल्कि एनजेड का उपयोग कर सकते हैं। तो सीडीबीएल (एनजेड (कोल्वल, 0) का उपयोग करें) –

+1

एनजे() मेरे आईआईएफ (.. आईएस नल ..) से कम है: यह एक्सेस यूआई के बाहर इस्तेमाल होने पर सिंटैक्स त्रुटि का कारण बनता है। साथ ही, डेटा टाइपिंग अजीब हो जाती है क्योंकि SQL कोड में Nz() टेक्स्ट को परिणाम देता है। अधिक जानकारी, http://allenbrowne.com/QueryPerfIssue.html देखें।इस मामले में, हालांकि, इसे सीडीबीएल() फ़ंक्शन 'केवल' में लपेटकर एक प्रदर्शन समस्या उत्पन्न होती है। – onedaywhen

3

आप FLOAT फ़ंक्शन CDBL() पर कास्ट का उपयोग कर सकते हैं, लेकिन कुछ हद तक विचित्र रूप से, एक्सेस डेटाबेस इंजन NULL मान को संभाल नहीं सकता है, इसलिए आपको इसे स्वयं संभालना होगा।

SELECT first_column, 
     IIF(second_column IS NULL, NULL, CDBL(second_column)) 
      AS second_column_as_float 
    INTO Table666 
    FROM MyTest; 

... लेकिन आप अपनी चाबी, बाधाओं, आदि जोड़ने के लिए बेहतर बस CREATE TABLE पहले तो INSERT INTO..SELECT उपयोग करने के लिए यह पॉप्युलेट करने के लिए ALTER TABLE की जरूरत जा रहे हैं।

0

ऐसा करने का एक आसान तरीका सही फ़ील्ड प्रकारों के साथ एक खाली तालिका बनाना है और फिर एक अपेंड-टू क्वेरी और एक्सेस डेटा को गंतव्य फ़ील्ड में स्वचालित रूप से परिवर्तित कर देगा।

0

मेरे पास एक समान स्थिति थी, लेकिन मेरे पास NUMERIC डेटाटाइप के साथ एक फ़ील्ड बनाने वाली मेक-टेबल क्वेरी थी जिसे मैं छोटा टेक्स्ट बनाना चाहता था।

मैंने जो किया (और मुझे स्टैक से विचार मिला) शॉर्ट टेक्स्ट के रूप में प्रश्न के साथ तालिका बनाने के लिए है, और साथ ही रिकॉर्ड्स को साफ़ करने के लिए एक डिलीट क्वेरी बनाएं। मुझे लगता है कि यह मजाकिया है कि एक्सेस में एक डिलीट क्वेरी तालिका को हटा नहीं देती है, बस इसमें रिकॉर्ड्स - मुझे लगता है कि आपको टेबल को शुद्ध करने के लिए एक ड्रॉप टेबल फ़ंक्शन का उपयोग करना होगा ...

फिर, मैं मेरी मेक-टेबल क्वेरी को एक APPEND क्वेरी में परिवर्तित कर दिया, जिसे मैंने पहले कभी नहीं किया था ... और मैंने अभी अपनी प्रक्रिया में DELETE क्वेरी को चलाने के लिए जोड़ा है।

धन्यवाद, स्टैक ओवरफ़्लो!

स्टीव

संबंधित मुद्दे