আমি> 100 টি পছন্দ সহ একটি কেস স্টেটমেন্ট লিখেছিলাম যেখানে আমি সাধারণ ক্যোয়ারিতে 4 জায়গায় একই বিবৃতিটি ব্যবহার করছি।
তাদের মধ্যে একটি ইউনিয়নের সাথে একই প্রশ্নটি দু'বার করে তবে একটি গণনাও করছে এবং তাই গোষ্ঠীটির সাথে কেস স্টেটমেন্টও রয়েছে।
এটি এমন কিছু সংস্থার নাম পুনর্বিবেচনা করতে হবে যেখানে একই সংস্থার বিভিন্ন রেকর্ড আলাদাভাবে বানান।
আমি একটি ভেরিয়েবলকে ভারচর (MAX) হিসাবে ঘোষণা করার চেষ্টা করেছি
declare @CaseForAccountConsolidation varchar(max)
SET @CaseForAccountConsolidation = 'CASE
WHEN ac.accountName like ''AIR NEW Z%'' THEN ''AIR NEW ZEALAND''
WHEN ac.accountName LIKE ''AIR BP%'' THEN ''AIR BP''
WHEN ac.accountName LIKE ''ADDICTION ADVICE%'' THEN ''ADDICTION ADVICE''
WHEN ac.accountName LIKE ''AIA%'' THEN ''AIA''
...
যখন আমি এটি আমার নির্বাচিত বিবৃতিতে ব্যবহার করতে গিয়েছিলাম - ক্যোয়ারী সবেমাত্র কেস স্টেটমেন্টটিকে পাঠ্য হিসাবে ফিরিয়ে দিয়েছে এবং এটি মূল্যায়ন করে নি।
আমি এটি দ্বারা গ্রুপে এটি ব্যবহার করতে অক্ষম ছিলাম - আমি এই ত্রুটি বার্তাটি পেয়েছি:
Each GROUP BY expression must contain at least one column that is not an outer reference.
আদর্শভাবে আমি কেবলমাত্র একটি জায়গায় সিএসইটি রাখতে চাই - যাতে আমার কোনও লাইন আপডেট করার এবং অন্য কোথাও অনুলিপি না করার কোনও সম্ভাবনা না থাকে।
এটি করার কিছু উপায় আছে?
আমি অন্যান্য উপায়ে উন্মুক্ত (সম্ভবত কোনও ফাংশন - তবে এগুলি কীভাবে এটি ব্যবহার করা যায় তা আমি নিশ্চিত নই)
আমি বর্তমানে যে নির্বাচনটি ব্যবহার করছি তার একটি নমুনা এখানে দেওয়া হল
SELECT
SUM(c.charge_amount) AS GSTExcl
,dl.FirstDateOfMonth AS MonthBilled
,dl.FirstDateOfWeek AS WeekBilled
,CASE
WHEN ac.accountName like 'AIR NEW Z%' THEN 'AIR NEW ZEALAND'
WHEN ac.accountName LIKE 'AIR BP%' THEN 'AIR BP'
WHEN ac.accountName LIKE 'ADDICTION ADVICE%' THEN 'ADDICTION ADVICE'
WHEN ac.accountName LIKE 'AIA%' THEN 'AIA'
ELSE ac.accountName
END AS accountName
,dl.FinancialYear
,CONVERT(Date,c.date_charged) AS date_charged
FROM [accession] a
LEFT JOIN account_code ac ON a.account_code_id = ac.account_code_id
LEFT Join charge c ON a.accession_id = c.accession_id
LEFT JOIN dateLookup dl ON convert(date,c.date_charged) = dl.date
WHERE a.datecreated = CONVERT(DATE,now())
GROUP BY
dl.FirstDateOfMonth
,dl.FinancialYear
,dl.FirstDateOfWeek
,CONVERT(Date,c.date_charged)
,CASE
WHEN ac.accountName like 'AIR NEW Z%' THEN 'AIR NEW ZEALAND'
WHEN ac.accountName LIKE 'AIR BP%' THEN 'AIR BP'
WHEN ac.accountName LIKE 'ADDICTION ADVICE%' THEN 'ADDICTION ADVICE'
WHEN ac.accountName LIKE 'AIA%' THEN 'AIA'
ELSE ac.accountName
END
UNION
SELECT
SUM(c.charge_amount) AS GSTExcl
,dl.FirstDateOfMonth AS MonthBilled
,dl.FirstDateOfWeek AS WeekBilled
,CASE
WHEN ac.accountName like 'AIR NEW Z%' THEN 'AIR NEW ZEALAND'
WHEN ac.accountName LIKE 'AIR BP%' THEN 'AIR BP'
WHEN ac.accountName LIKE 'ADDICTION ADVICE%' THEN 'ADDICTION ADVICE'
WHEN ac.accountName LIKE 'AIA%' THEN 'AIA'
ELSE ac.accountName
END AS accountName
,dl.FinancialYear
,CONVERT(Date,c.date_charged) AS date_charged
FROM [accession] a
LEFT JOIN account_code ac ON a.account_code_id = ac.account_code_id
LEFT Join charge c ON a.accession_id = c.accession_id
LEFT JOIN dateLookup dl ON convert(date,c.date_charged) = dl.date
WHERE a.datecreated = DATEADD(YEAR,-1,CONVERT(DATE,now()))
GROUP BY
dl.FirstDateOfMonth
,dl.FinancialYear
,dl.FirstDateOfWeek
,CONVERT(Date,c.date_charged)
,CASE
WHEN ac.accountName like 'AIR NEW Z%' THEN 'AIR NEW ZEALAND'
WHEN ac.accountName LIKE 'AIR BP%' THEN 'AIR BP'
WHEN ac.accountName LIKE 'ADDICTION ADVICE%' THEN 'ADDICTION ADVICE'
WHEN ac.accountName LIKE 'AIA%' THEN 'AIA'
ELSE ac.accountName
END
এই ইউনিয়নটির উদ্দেশ্য হ'ল সময়কালের জন্য সমস্ত ডেটা ফেরত দেওয়া এবং 12 মাস আগে একই সময়ের জন্য ডেটা ফিরিয়ে আনা ALSO
সম্পাদনা: একটি অনুপস্থিত "ক্যাচ-সমস্ত"
EDIT2 যুক্ত করেছে: ইউনিয়ন বিবৃতি
EDIT3 এর একটি দ্বিতীয় Added যুক্ত করেছে: কিছু অন্যান্য প্রয়োজনীয় উপাদান অন্তর্ভুক্ত করার জন্য গ্রুপকে সংশোধন করেছে
WHERE a.datecreated = CONVERT(DATE,now()) OR a.datecreated = DATEADD(YEAR,-1,CONVERT(DATE,now()))
?