الصفوف في الأعمدة الخاصة اعتمادا على قيمتها

StackOverflow https://stackoverflow.com/questions/236236

  •  04-07-2019
  •  | 
  •  

سؤال

ولدي استعلام تحديد التي تنتج حاليا إلى النتائج التالية:

Description   Code    Price
 Product 1     A        5
 Product 1     B        4
 Product 1     C        2

وعن طريق الاستعلام التالي:

SELECT DISTINCT np.Description, p.promotionalCode, p.Price
FROM            Price AS p INNER JOIN
                         nProduct AS np ON p.nProduct = np.Id

وأريد أن ننتج ما يلي:

Description  A  B  C
 Product 1   5  4  2
هل كانت مفيدة؟

المحلول

SELECT 
    np.Id, 
    np.Description, 
    MIN(Case promotionalCode WHEN 'A' THEN Price ELSE NULL END) AS 'A',
    MIN(Case promotionalCode WHEN 'B' THEN Price ELSE NULL END) AS 'B',
    MIN(Case promotionalCode WHEN 'C' THEN Price ELSE NULL END) AS 'C'
FROM 
    Price AS p 
INNER JOIN nProduct AS np ON p.nProduct = np.Id
GROUP BY 
    np.Id,
    np.Description

وهنا هو اختبار مثال بسيط:

DECLARE @temp TABLE (
    id INT,
    description varchar(50),
    promotionalCode char(1),
    Price smallmoney
)

INSERT INTO @temp
select 1, 'Product 1', 'A', 5
    union
SELECT 1, 'Product 1',  'B', 4
    union
SELECT 1, 'Product 1', 'C', 2



SELECT
    id,
    description,
    MIN(Case promotionalCode WHEN 'A' THEN Price ELSE NULL END) AS 'A',
    MIN(Case promotionalCode WHEN 'B' THEN Price ELSE NULL END) AS 'B',
    MIN(Case promotionalCode WHEN 'C' THEN Price ELSE NULL END) AS 'C'
FROM
     @temp
GROUP BY 
    id,
    description

نصائح أخرى

إذا كنت تستخدم SQL Server 2005، يمكنك استخدام المشغل PIVOT الجديد.

وPIVOT بسيط - عدد الطلبات أماكن العملاء على المنتجات الفردية

وهيكل جدول ترتيب بسيط:

CREATE TABLE Sales.[Order]
    (Customer varchar(8), Product varchar(5), Quantity int)

ويحتوي الجدول القيم التالية:

Customer Product Quantity
    Mike     Bike    3
    Mike     Chain   2
    Mike     Bike    5
    Lisa     Bike    3
    Lisa     Chain   3
    Lisa     Chain   4

مثال: عملية PIVOT على الطاولة ترتيب:

SELECT *
    FROM Sales.[Order]
    PIVOT (SUM(Quantity) FOR Product IN ([Bike],[Chain])) AS PVT

والناتج المتوقع من هذا الاستعلام هو:

Customer Bike Chain
Lisa        3    7
Mike        8    2

إذا كنت لا تستخدم SQL Server و قد كنت تبحث عن "محور" لقاعدة البيانات الخاصة بك.

والجواب داكويرث هو جيد. إذا كان يمكنك الحصول على قيمة أكثر من واحد لكل خلية، قد ترغب في استخدام AVG أو SUM بدلا من MIN، اعتمادا على ما كنت تريد أن ترى.

إذا DBMS يدعم ذلك، قد ترغب أيضا في النظر في استعلام جدولي أو استعلام محور. على سبيل المثال، MS Access والاستعلامات الجدولية.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top