2016-02-05 53 views
1

唯一记录的值我有一个包含以下各列的表:我们如何总结在SQL

ProductName copmanyname arianame bno  mrp exp_date Date  qty 
DANZEN DS HELIX PHARMA CITY 1 J026 215 01-Feb-16 30-Oct-19 41 
DANZEN DS HELIX PHARMA CITY 2 J026 215 01-Feb-16 30-Aug-19 2 
HIPRO  HELIX PHARMA CITY 1 J035 225 01-Feb-16 30-Nov-18 20 
NOGARD  HELIX PHARMA CITY 1 J010 135 01-Feb-16 30-Nov-20 2 
NOGARD  HELIX PHARMA CITY 2 J010 135 01-Feb-16 30-Nov-20 8 
NOGARD  HELIX PHARMA TANK J004 135 01-Feb-16 30-May-20 1 
ALINAMIN F HELIX PHARMA CITY 1 I002 195 02-Feb-16 30-Sep-19 2 
ALINAMIN F HELIX PHARMA CITY 2 H003 195 02-Feb-16 30-Nov-18 1 

我要显示在特定日期的记录,其中记录有相同的产品和公司及BNO和mrp那么这些记录的数量就会和。例如上表:

ProductName copmanyname arianame bno  mrp exp_date Date  qty 
NOGARD  HELIX PHARMA CITY 1 J010 135 01-Feb-16 30-Nov-20 30 

我试着用下面的语句,但它不总结数量,显示所有记录。

SELECT 
    ProductName, CopmanyName, AriaName, bno, mrp, exp_date, 
    Sum(quantity) AS qty 
FROM 
    q_saledetail 
GROUP BY 
    ProductName, CopmanyName, AriaName, bno, mrp, exp_date,date 
WHERE 
    date = any date 
+0

请纠正你的问题:与产品,公司,BNO和MRP的数量应该是10,不是30 ... – nabuchodonossor

+1

解释你是如何得到30作为期望的结果。我得到2 + 8 = 10。另外20个用于不同的产品。 –

+0

你想按日期分组吗?但是你想在结果表中记录什么日期? MAX(日期)? –

回答

0

使其他意见明确:

ProductName copmanyname arianame bno  mrp exp_date Date  qty 
DANZEN DS HELIX PHARMA CITY 1 J026 215 01-Feb-16 30-Oct-19 41 
DANZEN DS HELIX PHARMA CITY 2 J026 215 01-Feb-16 30-Aug-19 2 
          ^can you see the different arianame? ^^^ date?? 

HIPRO  HELIX PHARMA CITY 1 J035 225 01-Feb-16 30-Nov-18 20 

NOGARD  HELIX PHARMA CITY 1 J010 135 01-Feb-16 30-Nov-20 2 
NOGARD  HELIX PHARMA CITY 2 J010 135 01-Feb-16 30-Nov-20 8 
NOGARD  HELIX PHARMA TANK J004 135 01-Feb-16 30-May-20 1 
          ^again ^^^^ 

ALINAMIN F HELIX PHARMA CITY 1 I002 195 02-Feb-16 30-Sep-19 2 
ALINAMIN F HELIX PHARMA CITY 2 H003 195 02-Feb-16 30-Nov-18 1 
          ^and ^^^^     ^^^^^^^^^ 

,如果你看一看NOGARD:你有3个不同的行 - 他们不能进行分组。如果你将arianame和bno分开 - 那么你可以将NOGARD分组到数量10 ...

+0

或者如果你想要那些来自CITY并且忽略TANK,你可以在WHERE子句中添加--- WHERE AriaName LIKE“CITY%”,这将得到总数为10. – HardLeeWorking

+0

ok假设咏叹调名字相同 –

+0

NOGARD HELIX PHARMA CITY 1 J010 135 01-Feb-16 30-Nov-20 2 NOGARD HELIX PHARMA CITY 1 J010 135 01-Feb-16 30-Nov-20 8 NOGARD HELIX PHARMA CITY 1 J004 135 01-Feb-16 30-May-20 1 –

0

你不告诉我们你使用的DB(我期望MySQL);

然后你有很多错误在你的查询,并可能在你的算法。

这是我想你可能照顾:

SQL Fiddle

的MySQL 5.6架构设置

CREATE TABLE q_saledetail 
    (`ProductName` varchar(10), `copmanyname` varchar(12), `arianame` varchar(6), `bno` varchar(4), `mrp` int, `exp_date` varchar(9), `Date` varchar(9), `qty` int) 
; 

INSERT INTO q_saledetail 
    (`ProductName`, `copmanyname`, `arianame`, `bno`, `mrp`, `exp_date`, `Date`, `qty`) 
VALUES 
    ('DANZEN DS', 'HELIX PHARMA', 'CITY 1', 'J026', 215, '01-Feb-16', '30-Oct-19', 41), 
    ('DANZEN DS', 'HELIX PHARMA', 'CITY 2', 'J026', 215, '01-Feb-16', '30-Aug-19', 2), 
    ('HIPRO', 'HELIX PHARMA', 'CITY 1', 'J035', 225, '01-Feb-16', '30-Nov-18', 20), 
    ('NOGARD', 'HELIX PHARMA', 'CITY 1', 'J010', 135, '01-Feb-16', '30-Nov-20', 2), 
    ('NOGARD', 'HELIX PHARMA', 'CITY 2', 'J010', 135, '01-Feb-16', '30-Nov-20', 8), 
    ('NOGARD', 'HELIX PHARMA', 'TANK', 'J004', 135, '01-Feb-16', '30-May-20', 1), 
    ('ALINAMIN F', 'HELIX PHARMA', 'CITY 1', 'I002', 195, '02-Feb-16', '30-Sep-19', 2), 
    ('ALINAMIN F', 'HELIX PHARMA', 'CITY 2', 'H003', 195, '02-Feb-16', '30-Nov-18', 1) 
; 

查询1

SELECT 
    ProductName, copmanyname, arianame, bno, mrp, exp_date,`Date`, 
    Sum(qty) AS quantity 
FROM 
    q_saledetail 
WHERE 
    `Date` = '30-Nov-20' 
GROUP BY 
    ProductName, copmanyname, arianame, bno, mrp, exp_date,`Date` 

Results

| ProductName | copmanyname | arianame | bno | mrp | exp_date |  Date | quantity | 
|-------------|--------------|----------|------|-----|-----------|-----------|----------| 
|  NOGARD | HELIX PHARMA | CITY 1 | J010 | 135 | 01-Feb-16 | 30-Nov-20 |  2 | 
|  NOGARD | HELIX PHARMA | CITY 2 | J010 | 135 | 01-Feb-16 | 30-Nov-20 |  8 | 

查询2

-- or if you want to group by `arianame` too 

SELECT 
    ProductName, copmanyname, GROUP_CONCAT(arianame), bno, mrp, exp_date,`Date`, 
    Sum(qty) AS quantity 
FROM 
    q_saledetail 
WHERE 
    `Date` = '30-Nov-20' 
GROUP BY 
    ProductName, copmanyname, bno, mrp, exp_date,`Date` 

Results

| ProductName | copmanyname | GROUP_CONCAT(arianame) | bno | mrp | exp_date |  Date | quantity | 
|-------------|--------------|------------------------|------|-----|-----------|-----------|----------| 
|  NOGARD | HELIX PHARMA |   CITY 1,CITY 2 | J010 | 135 | 01-Feb-16 | 30-Nov-20 |  10 | 
0

在你的问题的查询大大不同于你所要求得到的是什么结果。此外,您的期望输出似乎在数量上是关闭的。

如果您想要产品名称,公司名称,bno和mrp相同的数量总和,那么按exp_date和date进行分组也是错误的。

如果你看看这个SQL Fiddle,我已经过滤了一个随机日期,然后按你提到的4列进行分组。

SELECT 
    ProductName, companyName, bno, mrp, SUM(qty) as Quantity 

FROM 
    FiddleTable 
WHERE [date] = '30-Nov-20' 
GROUP BY 
    ProductName, companyName, bno, mrp 
+0

感谢所有我得到了上述建议的想法表单,我的工作已经完成。实际上,我想要显示具有相同名称,相同bno和相同mrp显示的产品记录在一个数量总和的地方。它在你的指导帮助下完成得很好。谢谢 –