الصفوف في الأعمدة الخاصة اعتمادا على قيمتها
سؤال
ولدي استعلام تحديد التي تنتج حاليا إلى النتائج التالية:
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 والاستعلامات الجدولية.