【问题标题】:How to get a certain data in one row on如何在一行中获取某个数据
【发布时间】:2013-12-18 06:30:25
【问题描述】:

是否可以在sql中获取某一行下的某条数据?

目前我的结果是:

名称 Month_Number Month YEAR Total_Amount Total_Retailfee Total_Transactions 晶石集团 2013 年 1 月 1 日 46928270.04 269477.0855 100445 Shoprite Checkers Pty Ltd 2013 年 1 月 1 日 83228663.71 290345.517 91282 Pick n Pay (Pty) Ltd 2013 年 1 月 1 日 78518522.5 590395.6488 210117 佩普 2013 年 1 月 1 日 185792113.3 1847361.334 457374

但我需要这样:

名称 Month_Number 月份 YEAR 说明 Spar Group 2013 年 1 月 1 日 Total_Amount 46928270.04 Total_Retailfee 269477.0855 Total_Transactions 100445

【问题讨论】:

  • 试试SELECT * FROM yourtable WHERE name = 'Spar Group'?
  • 对不起,我需要的结果没有正确显示,我基本上需要所有这四个名称,但我需要 Total amount、total_Retailfee 和 total_transactions 彼此下方,行名称作为描述,每个金额旁边。

标签: mysql sql sql-server


【解决方案1】:

如果我理解正确,您正在寻找这样的东西:

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

这将只选择该行中的某些值。

【讨论】:

    【解决方案2】:

    类似的东西-

    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 函数。

    【讨论】:

    • 我已更改查询。
    • USE [PAYAT] SELECT c.name,month(DateCreated) AS Month_Number, YEAR(DateCreated) AS YEAR, sum(t.amount) as Total_Amount, sum (t.Retailfee) AS Total_Retailfee, count (t.RecID) 作为 Total_Transactions FROM dbo.tblPay@transactions t (nolock) left outer join dbo.tblPay@company c (nolock) ON t.RetailId = c.RecID GROUP BY c.name,month(DateCreated),YEAR( DateCreated) ORDER BY Month(DateCreated) - 这是我目前拥有的脚本
    • 我同意 Devart 查询。@user3110565 你应该总是告诉你如何得到这样的结果。它可以从一开始就纠正。
    【解决方案3】:

    首先我想提一下,如果这是为了在 Web 界面或报告中进行演示,您可以使用求和进行更简单的分组查询,然后简单地将数据片段移动到需要的位置。例如,您可以在 [Total_Amount] 之后开始一个新的 HTML 行,并插入 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]
    

    您似乎希望在查询中为数据集中的每个 [name] 和 [MONTH] 组合返回三行。如果是这样,这里有一个解决方案,它使用一个设置来创建一些示例数据和一个派生表来根据需要提取它:

    -- 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
    

    【讨论】:

      猜你喜欢
      • 2023-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-06
      相关资源
      最近更新 更多