এটিকে সহজ এবং কীভাবে একাধিক সিটিই করতে হয় তা জিজ্ঞাসা করে


156

আমি এই সহজ টি-SQL কোয়েরি, এটি একটি টেবিল থেকে কলাম একটি গুচ্ছ নির্গত এবং অন্যান্য থেকে তথ্য যোগদান করে আছে সংশ্লিষ্ট টেবিল।

আমার ডেটা মডেল সহজ। অংশগ্রহণকারীদের সাথে আমার একটি নির্ধারিত ইভেন্ট রয়েছে। প্রতিটি ইভেন্টে কতজন অংশগ্রহণকারী অংশ নেবেন তা আমার জানতে হবে।

আমার সমাধানটি এমন একটি সিটিই যুক্ত করা যা নির্ধারিত ইভেন্টগুলিকে গোষ্ঠীভুক্ত করে এবং অংশগ্রহণকারীদের সংখ্যা গণনা করে।

এটি আমাকে নির্ধারিত ইভেন্ট অনুযায়ী সেই তথ্যে যোগ দিতে দেবে। প্রশ্নটি সহজ রাখছেন।

আমি আমার প্রশ্নগুলি সহজ রাখতে চাই, তবে, ভবিষ্যতে যদি কখনও আমার সাধারণ জিজ্ঞাসার সময় অ্যাডিশনাল অস্থায়ী ফলাফল অ্যাক্সেসযোগ্য হওয়া দরকার হয় তবে আমি কী করব?

আমি সত্যিই এটি পছন্দ করব, যদি আমার একাধিক সিটিই থাকতে পারে তবে আমি না পারি, তাই না? এখানে আমার বিকল্পগুলি কি?

আমি অ্যাপ্লিকেশন ডেটা স্তরে মতামত এবং জিনিসগুলি বাতিল করে দিয়েছি। আমি আমার এসকিউএল প্রশ্নগুলি বিচ্ছিন্ন করতে পছন্দ করি।

উত্তর:


297

আপনার CTEএকটি ক্যোয়ারীতে একাধিক গুলি থাকতে পারে , পাশাপাশি একটি পুনরায় ব্যবহার করুন CTE:

WITH    cte1 AS
        (
        SELECT  1 AS id
        ),
        cte2 AS
        (
        SELECT  2 AS id
        )
SELECT  *
FROM    cte1
UNION ALL
SELECT  *
FROM    cte2
UNION ALL
SELECT  *
FROM    cte1

উল্লেখ্য, যে SQL Serverপুনর্বিচার পারে CTEপ্রতিবার এটি অ্যাক্সেস করা হয়, তাই আপনি যদি মত মান ব্যবহার করছেন RAND(), NEWID()ইত্যাদি, তারা মধ্যবর্তী পরিবর্তন হতে পারে CTEকল।


3
এটা ছিল সহজ। এমএসডিএন ডকুমেন্টেশন ইস্যুটি সম্পর্কে কিছুটা অস্পষ্ট ছিল, আমি কোনও সিদ্ধান্তকৃত খুঁজে পেলাম না। আপনাকে অনেক ধন্যবাদ!
জন লিডেগ্রেন

1
এটি সাধারণ_সামগ্রী_প্রকাশ (লেনদেন-এসকিউএল) এর সাথে নথিভুক্ত । আপনি এই সিনট্যাক্স বিভাগে হয় (বিশেষ নোট নিতে দেখতে পারেন [ ,...n ]মধ্যে [ WITH <common_table_expression> [ ,...n ] ]। উদাহরণস্বরূপ সি, "একটি একক ক্যোয়ারীতে একাধিক কোটে সংজ্ঞা ব্যবহার করে," স্পষ্টভাবে এই আউট কল। দুঃখিতভাবে, এই উদাহরণে এসকিউএল 2008 এবং জন্য ডকুমেন্টেশনে দেওয়া হয় না পুরানো (যেমন, ওপি প্রশ্ন পোস্ট করার সময় উদাহরণটি সরবরাহ করা হয়নি)
ব্রায়ান

আমি
এটিতে

@ টমস্টিকেল শেষের আগে ক্যোয়ারির অর্ধেকটি ব্যবহারের চেষ্টা করুনUNION ALL
কাসনসুই

@ কাসনোই হ্যাঁ কাজ করেছে। মন্তব্যটি লেখার পরে আমি তা করেছি। নিশ্চিত নয় যে ২ য় ইউনিয়ন কেন সেখানে রয়েছে ...
টম স্টিকেল

89

আপনি অবশ্যই একটি একক ক্যোয়ারী এক্সপ্রেশনে একাধিক সিটিই রাখতে সক্ষম হবেন। আপনাকে কেবল একটি কমা দিয়ে তাদের আলাদা করতে হবে। এখানে একটি উদাহরণ। নীচের উদাহরণে, দুটি সিটিই রয়েছে। একজনের নাম CategoryAndNumberOfProductsএবং দ্বিতীয়টির নাম রাখা হয়েছে ProductsOverTenDollars

WITH CategoryAndNumberOfProducts (CategoryID, CategoryName, NumberOfProducts) AS
(
   SELECT
      CategoryID,
      CategoryName,
      (SELECT COUNT(1) FROM Products p
       WHERE p.CategoryID = c.CategoryID) as NumberOfProducts
   FROM Categories c
),

ProductsOverTenDollars (ProductID, CategoryID, ProductName, UnitPrice) AS
(
   SELECT
      ProductID,
      CategoryID,
      ProductName,
      UnitPrice
   FROM Products p
   WHERE UnitPrice > 10.0
)

SELECT c.CategoryName, c.NumberOfProducts,
      p.ProductName, p.UnitPrice
FROM ProductsOverTenDollars p
   INNER JOIN CategoryAndNumberOfProducts c ON
      p.CategoryID = c.CategoryID
ORDER BY ProductName

5
@ জনলিডগ্রেন: প্রথম সঠিক উত্তরের 2 মিনিটের মধ্যে একটি সঠিক উত্তর পোস্ট করা একটি উত্সাহ হিসাবে যোগ্য, যা আমি দিয়েছি, কমপক্ষে rit
পিটার মাজেদ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.