2013-12-18 1 views
0

можно ли получить определенные данные под одной строкой в ​​sql?Как получить определенные данные в одной строке на

На данный момент мой результат:

 
name      Month_Number Month YEAR Total_Amount Total_Retailfee Total_Transactions 
Spar Group     1    January 2013 46928270.04 269477.0855  100445 
Shoprite Checkers Pty Ltd 1    January 2013 83228663.71 290345.517  91282 
Pick n Pay (Pty) Ltd  1    January 2013 78518522.5 590395.6488  210117 
Pep       1    January 2013 185792113.3 1847361.334  457374 

Но мне это нужно так:

 
name  Month_Number Month YEAR Description   
Spar Group 1   January 2013 Total_Amount  46928270.04 
            Total_Retailfee 269477.0855 
            Total_Transactions 100445 
+0

попробовать 'SELECT * FROM yourtable WHERE имя =«Спар Group''? –

+0

Извините, результат, который мне нужен, не показал должным образом, мне в основном нужны все четыре этих имени, но мне нужно общее количество, total_Retailfee и total_transactions под друг другом с именем строки в качестве описания и рядом с каждой их суммой. –

ответ

1

Что-то вроде этого -

SELECT 
    name, Month_Number, Month, YEAR, 
    CONCAT_WS(
    '\r\n', 
    CONCAT('Total_Amount=',Total_Amount), 
    CONCAT('Total_Retailfee=',Total_Retailfee), 
    CONCAT('Total_Transactions=',Total_Transactions) 
) AS description 
FROM 
    table; 

CONCAT_WS функция.

+0

Спасибо, я посмотрю, если это работает –

+0

У меня есть chanaged запрос. – Devart

+0

ИСПОЛЬЗОВАНИЕ [PAYAT] ВЫБОР c.name, месяц (DateCreated) А.С. Month_Number, \t ГОД (DateCreated) КАК ГОД, сумма (t.amount), как TOTAL_AMOUNT, сумма (t.Retailfee) А.С. Total_Retailfee, счетчик (т .RecID), как Total_Transactions ОТ [email protected] т (NOLOCK) левое внешнее соединение [email protected] с (NOLOCK) ON t.RetailId = c.RecID GROUP BY c.name, месяц (DateCreated), YEAR (DateCreated) ORDER BY Month (DateCreated) - Это мой сценарий, который у меня есть на данный момент –

1

Если я вас правильно понял вы ищете что-то вроде этого:

SELECT column_1, column_3, column_5 FROM myTable WHERE column_1 = "some_value" 

Это будет выбрать только определенные значения в этой строке.

0

Прежде всего я хотел бы упомянуть, что если это для презентации в веб-интерфейсе или отчете, вы можете сделать гораздо более простой запрос группировки с суммированием, а затем просто переместить фрагменты данных, чтобы они появлялись там, где они должны быть , Например, вы можете начать новую строку HTML после [Total_Amount] и вставить 4 пустых ячейки, затем следующий промежуточный итог и т. Д., Создав желаемую структуру таблиц.

-- it appears this query contains everything you are asking for, but not using the same 'tabular structure.' 
SELECT 
    name 
    ,MONTH([MyDate]) AS [MonthNumber] 
    ,DATENAME(MONTH, [MyDate]) AS [MONTH] 
    ,YEAR([MyDate]) AS [YEAR] 
    ,SUM(Amount) AS [Total_Amount] 
    ,SUM(Retailfee) AS [Total_Retailfee] -- move down one row 
    ,SUM(Transactions) AS [Total_Transactions] -- move down two rows 
FROM #temp 
GROUP BY 
    name 
    ,MONTH([MyDate]) 
    ,DATENAME(MONTH, [MyDate]) 
    ,YEAR([MyDate] 

Похоже, что вы хотите иметь три строки возвращаются в запросе для каждого [имя] и [МЕСЯЦ] комбинации в наборе данных. Если да, то здесь решение, используя настройки, чтобы создать некоторые образцы данных и производной таблицы, чтобы извлечь это по желанию:

-- I find that providing example data help to get more accurate results for some queries 
CREATE TABLE #temp (
    name VARCHAR(20) 
    ,MyDate DATE 
    ,Amount DECIMAL(8,4) 
    ,Retailfee DECIMAL(8,4) 
    ,Transactions DECIMAL(8,4) 
); 

-- no idea what these values actually mean so the data may not make sense. 
INSERT #temp VALUES ('Spar Group','01/01/2013',1000.00,163.55,200.00) 
INSERT #temp VALUES ('Spar Group','01/02/2013',40.00,0.11,2.00) 
INSERT #temp VALUES ('Spar Group','01/03/2013',299.99,35.00,33.00) 
INSERT #temp VALUES ('Spar Group','02/03/2013',145.99,0.00,7.00) 
INSERT #temp VALUES ('Shoprite','01/01/2013',22.99,0.00,8.00) 
INSERT #temp VALUES ('Shoprite','01/02/2013',149.95,16.60,11.50) 

SELECT 
    name 
    ,[MonthNumber] 
    ,[MONTH] 
    ,[YEAR] 
    ,[Category] 
    ,[CategoryTotal] 
FROM (
    -- select the first row for each [name],[month] group 
    SELECT 
     name 
     ,MONTH([MyDate]) AS [MonthNumber] 
     ,DATENAME(MONTH, [MyDate]) AS [MONTH] 
     ,YEAR([MyDate]) AS [YEAR] 
     ,'Total_Amount' AS [Category] 
     ,SUM(Amount) AS [CategoryTotal] 
    FROM #temp 
    GROUP BY 
     name 
     ,MONTH([MyDate]) 
     ,DATENAME(MONTH, [MyDate]) 
     ,YEAR([MyDate]) 

    UNION ALL 
    -- select the second row for each [name],[month] group 
    SELECT 
     name 
     ,MONTH([MyDate]) AS [MonthNumber] 
     ,DATENAME(MONTH, [MyDate]) AS [MONTH] 
     ,YEAR([MyDate]) AS [YEAR] 
     ,'Total_Retailfee' AS [Category] 
     ,SUM(Retailfee) AS [CategoryTotal] 
    FROM #temp 
    GROUP BY 
     name 
     ,MONTH([MyDate]) 
     ,DATENAME(MONTH, [MyDate]) 
     ,YEAR([MyDate]) 

    UNION ALL 
    -- select the third row for each [name],[month] group 
    SELECT 
     name 
     ,MONTH([MyDate]) AS [MonthNumber] 
     ,DATENAME(MONTH, [MyDate]) AS [MONTH] 
     ,YEAR([MyDate]) AS [YEAR] 
     ,'Total_Transactions' AS [Category] 
     ,SUM(Transactions) AS [CategoryTotal] 
    FROM #temp 
    GROUP BY 
     name 
     ,MONTH([MyDate]) 
     ,DATENAME(MONTH, [MyDate]) 
     ,YEAR([MyDate]) 
) AS T 
ORDER BY 
    name, [MONTH], [YEAR] 
    ,CASE 
     WHEN [Category]='Total_Amount' THEN 1 
     WHEN [Category]='Total_Retailfee' THEN 2 
     ELSE 3 
    END 
Смежные вопросы