ওরাকল এসকিএল কোয়েরিতে বর্ধিত সংখ্যা তৈরি করুন


13

কোনও টেবিল তৈরি না করে কীভাবে ওরাকল এসকিএল কোয়েরিতে ইনক্রিমেন্টাল নম্বর তৈরি করবেন? আমি "সহ" ধারাটি ব্যবহার করার চেষ্টা করেছি, তবে আমি প্রত্যাশিত ফলাফল পেতে ব্যর্থ হয়েছি। আমি ওরাকল 10 জি ব্যবহার করছি

এখানে কোডটি চেষ্টা করছি এটি মনে হচ্ছে কাজ করছে না:

WITH
TABLE3 AS ( SELECT 2008 YEARS FROM dual WHERE 1=1
union all
select t3.YEARS+1 from TABLE3 t3
WHERE 1=1 AND t3.YEARS < 2011
)

select YEARS from TABLE3

আমি চাই প্রত্যাশিত ফলাফল:

2008
2009
2010
2011

উত্তর:


14

কেরির উত্তরের মতো, তবে with(এবং কোনও এসও উত্তর দ্বারা অনুপ্রাণিত ) ছাড়াই :

SELECT 2007 + LEVEL AS YEARS
FROM DUAL
CONNECT BY LEVEL <= 4;

     YEARS
----------
      2008
      2009
      2010
      2011

বা যদি আপনার লক্ষ্যটি হ'ল শুরুর বছরটি হার্ড কোডিং ছাড়াই চলতি বছরটি পূর্ববর্তী তিনটি পেতে পারে:

SELECT EXTRACT(YEAR FROM SYSDATE) + 1 - LEVEL AS YEARS
FROM DUAL
CONNECT BY LEVEL <= 4
ORDER BY YEARS;

1
আমি মনে করি আমি এটি আমার কোডের জন্য বেছে নেব, এটি ক্লজ সহ ব্যবহারের চেয়ে অনেক বেশি সহজ
50LV3R

16

আমি মনে করি এটি একটি প্রাথমিক পয়েন্ট হিসাবে (এই পৃষ্ঠার উপর ভিত্তি করে ( http://psoug.org/definition/LEVEL.htm ) কাজ করবে ):

WITH counter
AS ( SELECT LEVEL seq
       FROM DUAL
     CONNECT BY LEVEL <= 4 )
SELECT (2008 + seq - 1) myYear
  FROM counter
 ORDER BY 1
;

এটি ফিরে আসা উচিত:

myYear
------
  2008
  2009
  2010
  2011

বিভিন্ন ফলাফল পেতে 2008 এবং 4 সামঞ্জস্য করুন।


5

দেখে মনে হচ্ছে ওপি একটি পুনরাবৃত্ত সাব-কোয়েরি ব্যবহার করে সমস্যাটি সমাধান করার চেষ্টা করছে। এটি 10 ​​জি তে কাজ করবে না কারণ 11.2 অবধি কার্যকারিতা যুক্ত করা হয়নি তবে 11.2+ এ নিম্নলিখিত সমস্যাগুলির একটি বৈধ সমাধান হতে পারে।

WITH T3(Years) AS (
   SELECT 2008 Years FROM dual
   UNION ALL
   SELECT Years + 1 FROM T3 WHERE Years < 2011
   )
SELECT * FROM T3;

ওপির অনুসন্ধান থেকে একমাত্র জিনিসটি অনুপস্থিত ছিল (YEARS)


এমএস এসকিউএল-তে সামান্য পরিবর্তিত কাজগুলিও WITH T3(Years) AS ( SELECT 2008 Years UNION ALL SELECT Years + 1 FROM T3 WHERE Years < 2011 ) SELECT * FROM T3;
चमत्कार 173

@ चमत्कार 173 আকর্ষণীয়, কেবল এটি সরান FROM dual
লেইফ রিফেল

dualএকটি ওরাকল নির্দিষ্ট সারণী। মাইক্রোসফট এসকিউএল বিভক্ত মত অন্য ডেটাবেস মাইএসকিউএল, postgres মত বিবৃতি অনুমতি select expression। mysql ডুয়াল
টেবিলটিও জানে

4

কেন শুধু সিক্যুয়েন্স তৈরি করবেন না?

CREATE SEQUENCE TEMP_YEAR_sEQUENCE START WITH 2008;

SELECT TEMP_YEAR_sEQUENCE.NEXTVAL FROM DUAL; 

....

DROP SEQUENCE TEMP_YEAR_SEQUENCE;

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

ক্রম মানের ছোট পরিসীমা জন্য আপনি এই জাতীয় কিছু ব্যবহার করতে পারেন:

select ROWNUM + 10   # start value
from ALL_OBJECTS 
where ROWNUM <= 5 ;  # count of values 

আপনার কেবল পর্যাপ্ত সংখ্যক সারি সহ একটি টেবিলের প্রয়োজন।


3
এত তুচ্ছ জিনিসের জন্য প্রচুর ওভারহেডের মতো মনে হয়, এবং ডিডিএল এমন একটি অন্তর্নিহিত প্রতিশ্রুতি করবে যা প্রত্যাশিত নয়। এবং ক্যোয়ারি ইস্যুকারী ব্যবহারকারীর একটি সিকোয়েন্স তৈরি করার অনুমতি নাও থাকতে পারে।
অ্যালেক্স পুল

আমি অ্যালেক্স পুলের সাথে একমত, তবে তবুও এটি অন্যভাবে ধন্যবাদ ধন্যবাদ
50LV3R

-1 কারণে @ অ্যালেক্সপুল জানিয়েছেন। যদি আপনি ক্রমটি পুনরায় না না করে কোয়েরিটিকে পুনরায় সাজান তবে আপনি আলাদা ফলাফল পাবেন।
चमत्कार 173

ক্রমটি ব্যবহার করে এমন ক্যোয়ারী সংখ্যার পছন্দসই সেটটি দেয় না।
चमत्कार 173

-1

কেস স্টেটমেন্টের ভিত্তিতে একাধিক পতাকা যুক্ত এবং বর্ধমান করার উদাহরণ এখানে।

WITH T3(FLAG1,FLAG2,FLAG3,tt,OTHER_DATA)  
AS (    
SELECT '0' FLAG1, '0' FLAG2, '0' FLAG3 , current_timestamp  tt , 'dummy'  OTHER_DATA 
FROM dual 
UNION ALL  
SELECT case when cast( FLAG2 as int) > 5 then
cast ((cast(FLAG1 as int) + 1) as varchar2(30)) else  FLAG1 end FLAG1,
cast((cast(FLAG2 as int) + 1) as varchar2(30)) FLAG2  ,case when (
(FLAG2 ='3') or (FLAG2 = '4')) then cast ((cast(  FLAG3 as int) + 1)
as varchar2(30)) else FLAG3 end FLAG3  ,current_timestamp  tt ,
'ACTUAL' OTHER_DATA FROM T3 WHERE FLAG2 < 10   
)
SELECT * FROM T3
WHERE OTHER_DATA != 'dummy' ;

- ফলাফল সেট নীচে

Flag1   Flag2   Flag3   TT                                              OTHER_DATA
0       1       0       21-DEC-15 08.31.05.229502000 PM ASIA/CALCUTTA   ACTUAL
0       2       0       21-DEC-15 08.31.05.229502000 PM ASIA/CALCUTTA   ACTUAL
0       3       0       21-DEC-15 08.31.05.229502000 PM ASIA/CALCUTTA   ACTUAL
0       4       1       21-DEC-15 08.31.05.229502000 PM ASIA/CALCUTTA   ACTUAL
0       5       2       21-DEC-15 08.31.05.229502000 PM ASIA/CALCUTTA   ACTUAL
0       6       2       21-DEC-15 08.31.05.229502000 PM ASIA/CALCUTTA   ACTUAL
1       7       2       21-DEC-15 08.31.05.229502000 PM ASIA/CALCUTTA   ACTUAL
2       8       2       21-DEC-15 08.31.05.229502000 PM ASIA/CALCUTTA   ACTUAL
3       9       2       21-DEC-15 08.31.05.229502000 PM ASIA/CALCUTTA   ACTUAL
4      10       2       21-DEC-15 08.31.05.229502000 PM ASIA/CALCUTTA   ACTUAL   

2
স্ট্রিং এবং সংখ্যাগুলির মধ্যে কেন সমস্ত ingালাই? এটি সম্পূর্ণরূপে নিশ্চিত নয় যে এটি বিদ্যমান উত্তরগুলিতে কী যুক্ত করে কারণ এটি ওপি খুঁজছেন বলে মনে হয় না।
অ্যালেক্স পুল

-1

"টেবিল" ক্রম থেকে 1 দ্বারা রনউম + 100 নির্বাচন করে কেবল একটিতে বৃদ্ধি করুন;

101, 102 ইত্যাদি সহ ফলাফল with

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.