সতর্কতা: নোয়া মান অ্যাকোয়া ডেটা স্টুডিওতে একটি সামগ্রিক বা অন্যান্য এসইটি অপারেশন দ্বারা নির্মূল করা হয়


97

ডেটা শূন্য হলে আমার সমস্যা আছে এবং ফলাফলটি প্রদর্শিত হওয়ার পরে সতর্কতাটি উপস্থিত হয়েছে। এই সমস্যার সমাধান কিভাবে?. যখন টেবিলের কোনও ডেটা নেই তখন নাল ডেটা কীভাবে পরিবর্তন করবেন ?.

এটি আমার কোড:

SELECT DISTINCT c.username             AS assigner_officer,
                d.description          AS ticketcategory,
                (SELECT Count(closed)
                 FROM   ticket
                 WHERE  assigned_to = c.user_id
                        AND closed IS NOT NULL
                 GROUP  BY assigned_to)closedcases,
                (SELECT Count(closed)
                 FROM   ticket
                 WHERE  assigned_to = c.user_id
                        AND closed IS NULL
                 GROUP  BY assigned_to)opencases
FROM   ticket a
       JOIN ticketlog b
         ON a.ticketid = b.ticketid
       JOIN access c
         ON a.assigned_to = c.user_id
       JOIN ticket_category d
         ON a.cat_code = d.id
       JOIN lookup_department e
         ON a.department_code = e.code 

ফলাফলটি এরকম প্রদর্শিত হচ্ছে: -

 Warnings: ---> 
   W (1): Warning: Null value is eliminated by an aggregate or other SET operation.
          <--- 
 assigner_officer     ticketcategory     closedcases     opencases    
 -------------------  -----------------  --------------  ------------ 
 abdulhafiz           Enquiry            (null)          0            
 affan                Enquiry            12              (null)       
 amirul               Enquiry            1               (null)       
 azrul_fahmi          Enquiry            45              0            
 Azwani               Enquiry            (null)          0            
 chai                 Enquiry            4               (null)       
 dalinawati           Enquiry            1               0            
 Emmy                 Complaints         (null)          0            
 Fadhlia              Enquiry            38              0            
 fairulhalif          Others             1               (null)       
 farikh               Enquiry            (null)          0            
 ismailh              Enquiry            28              0            
 izzahanna            Enquiry            (null)          0            
 Kamsuzilawati        Enquiry            1               (null)     

4
Count(closed) ... WHERE ... closed IS NULLCOUNTNOT NULL
মার্টিন স্মিথ


আমি একই সতর্কতা পাচ্ছি। আমি এবং নিজেই এই সতর্কবার্তাটিকে কিছু মনে করি না তবে এসকিউএল এজেন্ট দ্বারা চালিত হওয়ার জন্য আমার সঞ্চিত পদ্ধতিটি প্রয়োজন এবং যখন আমি এটি করি তখন সতর্কতা এজেন্টের কাজকে ব্যর্থ করে দেয়।
রিচিএসিসি

এই প্রশ্নটির কোনও মানে হয় না।
xr280xr

উত্তর:


104

আপনি বেশিরভাগই COUNTইউআইডি-র সংক্ষিপ্তসার জন্য ব্যবহার করবেন। অতএব

COUNT([uid]) সতর্কতা উত্পাদন করবে:

সতর্কতা: নাল মান একটি সামগ্রিক বা অন্যান্য এসইটি অপারেশন দ্বারা নির্মূল করা হয়।

বাম জোড়ায় ব্যবহার করা হচ্ছে যেখানে গণনা করা বস্তুটি বিদ্যমান নেই not

COUNT(*)এই ক্ষেত্রে ব্যবহার করাও ভুল ফলাফল রেন্ডার করবে, কারণ আপনি তখন উপস্থিত ফলাফলের মোট সংখ্যা (অর্থাত্ পিতামাতাদের) গণনা করবেন।

ব্যবহার COUNT([uid])বেড়ে চলেছে একটি বৈধ উপায়, এবং সতর্কবার্তা একটি সতর্কবার্তা ছাড়া আর কিছুই নয়। তবে আপনি যদি উদ্বিগ্ন হন এবং আপনি যদি এই ক্ষেত্রে সত্যিকারের ইউডের এক নম্বর পেতে চান তবে আপনি এটি ব্যবহার করতে পারেন:

SUM(CASE WHEN [uid] IS NULL THEN 0 ELSE 1 END) AS [new_count]

এটি আপনার ক্যোয়ারিতে প্রচুর ওভারহেড যুক্ত করবে না। (পরীক্ষিত এমএসকিউএল ২০০৮)


4
আমি তাই সফলতা ছাড়াই অনুসন্ধান করেছি এবং চেষ্টা করেছি কিন্তু আইএসএনএলএল এর সাথে নুলিফের সংমিশ্রণটি আমাকে বাঁচিয়েছে, আপনি এই দুটিয়ের সংমিশ্রণ চেষ্টা করতে পারেন উদাহরণস্বরূপ: ইসনুল (নুলিফ ([ফিল্ডভ্যালু], ০), ১)
কিউমাস্টার

"ওপেনক্যাস" কলামের জন্য বিশেষত সমাধানটি কি কেবল "নির্বাচন গণনা (1) ..." (বা অন্য কোনও আক্ষরিকের "গণনা") হিসাবে সহজ হবে না? দ্য ক্লজটি ইতিমধ্যে "এবং বন্ধ হ'ল নুল" উল্লেখ করেছে সুতরাং এই উদাহরণে কেস স্টেটমেন্ট সংক্ষিপ্ত করার প্রয়োজন নেই। এছাড়াও, আমি শুনেছি (aeons ago) "গণনা (*)" কোনও একক কলাম বা আক্ষরিক গণনা করার মতো দক্ষ নয় তবে এটি এখনও ঠিক আছে কিনা তা নিশ্চিত নয়।
রোয়ানপিডি

পরিবর্তে count([uid]), এটি ব্যবহার করতে কাজ করবে count(1)?
ফারহান

আপনি স্যার @ ম্যাট ট্রেরেন আমাকে বাঁচিয়েছেন :) আমি এই এক্সেল ফাইলে ডেটা সংযোগ করার চেষ্টা করেছি, ইতিমধ্যে একটি ইসনুল (এক্স, ওয়াই) ছিল কিন্তু এটি কাজ করেনি, তবে "সুম (কেস যখন এক্স 0 নম্বরের পরে 0 ই এলএসই এক্স) রয়েছে শেষ) এএস জেড "দুর্দান্ত কাজ করেছেন! ধন্যবাদ!
দিমিত্রি

21

এই সমস্যাটি সমাধান করার একটি উপায় হ'ল সতর্কতাগুলি বন্ধ করে দেওয়া।

SET ANSI_WARNINGS OFF;
GO

32
এমএসডিএন থেকে , এটি কেবল সমষ্টিগুলিতে নাল সম্পর্কে সতর্কবার্তাগুলি পরিবর্তন করে না, তবে শূন্য এবং ওভারফ্লো ত্রুটি দ্বারা বিভাজন পরিচালনারও পরিবর্তন করে। এর ফলে এই সমাধানটি আমার পক্ষে "না গো" হয়ে যায়।
ফ্রেডেরিক

4
আপনি এটিকে যাইহোক সমস্যা হিসাবে বিবেচনা করবেন না কেন? এটি কেবল
মার্টিন স্মিথ

4
@ মুকুস - না তা হয় না। এটি তীব্রতার স্তরে 10 বার্তা প্রিন্ট করে 10 10 বা তত কম কিছু তথ্যগত হিসাবে ত্রুটি হিসাবে বিবেচিত হয় না। SELECT SUM(X) FROM (VALUES ( 1 + NULL)) V(X);SELECT 'This is executed fine';
মার্টিন স্মিথ

4
@ রিচিএসিসি হ্যাঁ, কারণ এটি কোনও উত্তর নয় এবং চূড়ান্তভাবে আকাঙ্ক্ষিত এএনএসআই সতর্কতাগুলিকে একটি তথ্যমূলক বার্তা এড়িয়ে চলার অলস উপায় হিসাবে অক্ষম করা অন্য অনেকগুলি, স্বতঃস্ফূর্তভাবে তথ্যহীন বিষয়গুলিতে ভাঙ্গন সৃষ্টি করবে।
আন্ডারস্কোর_

4
আপনার গাড়ীর সতর্কতা আলো জ্বালানোর সমাধানটি হ'ল কেবল ড্যাশটি প্লাগ করা। এটি সম্ভবত সবচেয়ে খারাপ উত্তর যা আমি স্ট্যাকওভারফ্লোতে দেখেছি।
ভোরোনাইপোটাটো

18

ব্যবহার ISNULL(field, 0)এটি সমষ্টিগুলির সাথেও ব্যবহার করা যেতে পারে:

ISNULL(count(field), 0)

তবে, আপনি পরিবর্তন বিবেচনা করতে পারেন count(field) to count(*)

সম্পাদনা করুন:

চেষ্টা করুন:

closedcases = ISNULL(
   (select count(closed) from ticket       
    where assigned_to = c.user_id and closed is not null       
    group by assigned_to), 0), 

opencases = ISNULL(
    (select count(closed) from ticket 
     where assigned_to = c.user_id and closed is null 
     group by assigned_to), 0),

আমি চেষ্টা করেছি কিন্তু (নাল) এখনও সারিবদ্ধভাবে বিদ্যমান। ডেটা শূন্য হলে এই মানটি কীভাবে 0 এ পরিবর্তন করবেন?
আমিন এসসিও

আপনাকে ধন্যবাদ তবে নালটি উপস্থিত হলে নাল মানটিও একই সমস্যা পেয়েছিল। কিভাবে মান 0 এ পরিবর্তন করতে?
আমিন এসসিও

4
এফওয়াইআই: ISNULL(count(field), 0)এমএসএসকিউএল ২০০৮ আর 2 এ আমার পক্ষে কাজ করেনি। সমস্যাটি হ'ল কারণ আমি প্রধান টেবিলের সাথে যুক্ত টেবিলে রেকর্ডের সংখ্যা পেতে বাম বাহিরের যোগদানের টেবিলের ক্ষেত্রটি গণনা করার চেষ্টা করছিলাম। আমি একটি উপ-ক্যোয়ারী তৈরি করে শেষ করেছি যা অভ্যন্তরীণ দুটি টেবিলের সাথে যোগ হয়েছে প্রধান সারণীতে আইডি প্রতি গণনা পেতে। সাব কোয়েরিটি আইডির মূল টেবিলের সাথে বাইরের অংশে ছেড়ে গেছে। সাব কোয়েরির গণনাটি তখন 0 টি চেয়েছিলাম পেতে (ইস্রায়েলের বার্তা ছাড়াই) একটি ISNULL এ মোড়ানো হয়েছিল।
26:55

4
ক্রিস, এটি অন্য (অন্যদিকে) নয় (ISNULL (ক্ষেত্র, 0)) হওয়া উচিত। বর্তমান ফর্ম্যাটটি জিজ্ঞাসা করে, সমস্ত ফিরে আসবে এটি 0 এবং আসল গণনা নয়। যুক্তি: গণনা (ক্ষেত্র) সমস্ত ক্ষেত্রের মানগুলি যে শূন্য হবে তার একক নূলে ফিরে আসবে এবং আইএসএনআলএল ০-এ সেট করবে, ০ ফিরে আসবে
গোবিন্দ রায়

10

আপনি ফাংশনটির ISNULLভিতরে রাখতে চান COUNT, বাইরে নয়:

ভাল না: ISNULL(COUNT(field), 0)

ভাল: COUNT(ISNULL(field, 0))


12
এটা ভুল. count(ISNULL(field, 0))সমান হবে count(*), মান হিসাবে গণনা করা হয় আর আর হতে পারে না NULL

@hvd এটি ভুল নয়, ক্ষেত্রটি শূন্য হলে মানটি 0 হয়।
গোবিন্দ রাই

4
@ গোবিন্দরাই না, এটি সত্যিই ভুল। আপনি যদি বিশ্বাস করেন যে আপনি কাউন্টারিক্স উদাহরণটি নিয়ে আসতে পারেন, উদাহরণটি যেখানে এর COUNT(ISNULL(field, 0))চেয়ে আলাদা COUNT(*), দয়া করে এটি করুন , এসকিউএল ফিডল এ জাতীয় কাউন্টারিক্স উদাহরণটি ভাগ করা সহজ করে তোলে। তবে আপনি সক্ষম হবেন না। যেহেতু COUNTশূন্য হলেও নন-নাল মানগুলিকে গণনা করা হয় এবং ISNULL(field, 0)সর্বদা নন-মান হয়, সুতরাং COUNT(ISNULL(field, 0))সারিগুলি গণনা করা হয়। এটাই COUNT(*)এখানে ওপি এর পরে কী ছিল তা নয়।

4
@hvd আপনি সঠিক আছেন আমার উত্তরটি group byওপি পরে কী ছিল তার থেকে আলাদা প্রসঙ্গে একটি প্রশ্নের ভিত্তিতে ছিল। আমার ক্ষেত্রে, ISNULL(COUNT(field), 0)সমস্ত নূন্যমূল্যগুলির জন্য 0 এর একটি গণনা ফিরিয়ে আনবে যা একাধিক নাল মান ছিল এবং অন্যদিকে COUNT(ISNULL(field),0)নূন্যমূল্যের মোট # টির জন্য সঠিক গণনা ফিরে আসবে since তবে আবার দুটি সম্পূর্ণ ভিন্ন দৃশ্য।
গোবিন্দ রাই

কাজ করতে পেলাম। এই যে! sqlfiddle.com/#!3/ee0546/2 আপনার মন্তব্যে উচ্চারণ করেছেন LOL
গোবিন্দ রায়

-2

আমি এই ত্রুটি পাচ্ছিলাম; আমি কেবলমাত্র WHEREক্ষেত্রটির জন্য একটি ধারা রেখেছি যা countঅনুচ্ছেদের মধ্যে ব্যবহার করা হয়েছিল । এটা সমস্যা সমাধান। দ্রষ্টব্য: যদি নাল মান বিদ্যমান থাকে তবে এটি গণনার বাইরে থাকা হিসাবে রিপোর্টের জন্য এটির সমালোচনা কিনা তা পরীক্ষা করে দেখুন।

পুরানো প্রশ্ন:

select city, Count(Emp_ID) as Emp_Count 
from Emp_DB
group by city

নতুন জিজ্ঞাসা:

select city, Count(Emp_ID) as Emp_Count 
from Emp_DB
where Emp_ID is not null
group by city

-3

সামগ্রিক ফাংশনের অভ্যন্তরে যদি কোনও নাল মান বিদ্যমান থাকে তবে আপনি এই সমস্যার মুখোমুখি হবেন। পরিবর্তে কোড নীচে

 SELECT Count(closed)
  FROM   ticket
  WHERE  assigned_to = c.user_id
  AND closed IS NULL

মত ব্যবহার করুন

SELECT Count(ISNULL(closed, 0))
  FROM   ticket
  WHERE  assigned_to = c.user_id
  AND closed IS NULL
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.