Пример и решение, приведенное ниже, были выполнены с использованием ANSI SQL в SQL Server 2012. Это должно отлично работать в NETEZZA, если оно совместимо с ANSI.
Сначала создайте образец таблицы в TEMPDB и загрузите данные. Это специфический SQL-сервер. Может быть любая база данных тестирования, которую вы создаете.
-- Use temp db
USE TEMPDB;
GO
-- Create a temp table
CREATE TABLE T1
(
LOCATION_CODE CHAR(2),
PART_NUM CHAR(2),
CATEGORY_NAME VARCHAR(25),
YEAR_NUM INT,
SALES_NUM INT,
COST_NUM INT,
REV_NUM INT
);
-- Add 3 row of data
INSERT INTO T1
VALUES ('NY', '1A', 'Performance', 2001, 100, 35, 45);
INSERT INTO T1
VALUES ('IL', '2E', 'Quality', 2002, 250, 150, 44);
INSERT INTO T1
VALUES ('IL', '4F', 'Performance', 2003, 355, 280, 33);
GO
-- Show the data
SELECT * FROM T1;
GO
В общем, что вы хотите сделать, это реорганизовать данные. Создайте две разные строки для данных Performance и одну строку для данных Quality. Затем закажите все строки по местоположению и номеру детали.
UNION ALL - это то, что вы хотите. Этот оператор не удаляет дубликаты между наборами результатов. Три запроса по одному для каждого случая, UNION ALL между ними и ORDER BY в конце будут давать результаты, которые вы ищете.
http://technet.microsoft.com/en-us/library/ms180026.aspx
Вот пример кода.
-- Break Performance into 2 rows - A
SELECT
LOCATION_CODE,
PART_NUM,
CATEGORY_NAME,
'Sales' as GROUPED,
SALES_NUM as AMOUNT
FROM T1
WHERE CATEGORY_NAME = 'Performance'
UNION ALL
-- Break Performance into 2 rows - B
SELECT
LOCATION_CODE,
PART_NUM,
CATEGORY_NAME,
'Cost' as GROUPED,
COST_NUM as AMOUNT
FROM T1
WHERE CATEGORY_NAME = 'Performance'
UNION ALL
-- One row for Quality
SELECT
LOCATION_CODE,
PART_NUM,
CATEGORY_NAME,
'Rev' as GROUPED,
REV_NUM as AMOUNT
FROM T1
WHERE CATEGORY_NAME = 'Quality'
-- Order the results
ORDER BY LOCATION_CODE, PART_NUM;
Вот скриншот окна результатов в SSMS.
Это должно решить вашу проблему.
С уважением, Джон - Хитрый DBA
жаль, что я не уверен, как использовать ASCII таблицу, я вижу только там, где я могу добавить изображение или код, но не в качестве таблицы ASCII. благодаря – moe