我想像这样从资源表创建报告
docid|col5 | item | qty | price |
------------------------------------------
doc1 | a | item1 | 4 | 100 |
doc1 | a | item2 | 5 | 20 |
doc2 | a | item3 | 10 | 20 |
doc2 | a | item4 | 11 | 20 |
变成这样
no | docid | item | qt | price |
------------------------------------------
1 | doc1 | item1 | 4 | 100 |
| | item2 | 5 | 20 |
2 | doc2 | item3 | 10 | 20 |
| | item4 | 11 | 20 |
任何人都可以帮助我
最佳答案
下面的查询将执行您想要的操作。它具有三个特殊功能。
首先,它使用递增的
@docIdNumber
用户变量来 生成序列号 (1,2) 以伴随 (doc1,doc2)。这是 在 MySQL 中执行此操作的一种方法。其次,它使用
@prevDocId
用户变量来跟踪项目是否 仍然与上一行相同。如果是,它 打印“”,而不是值。最后,请注意使用 INNER JOIN 来初始化用户的不寻常用法 变量为 0 或 ''。这是获得那些的技巧 变量初始化。这就是它所做的全部。
整个事情都在http://sqlfiddle.com/#!2/99899/61 ,如果您想进行实验。
SELECT
IF(t.docid=@prevDocId,'',number) as number,
IF(t.docid=@prevDocId,'',@prevDocId:=t.docid) AS docid,
item,qty,price
FROM
(
SELECT DISTINCT docid,item,qty,price
FROM theTable
ORDER BY docid
) AS t
INNER JOIN
(
SELECT @docIdNumber := @docIdNumber + 1 as number, docid
FROM
(
SELECT docid
FROM theTable
GROUP BY docid
) t
INNER JOIN (SELECT @docIdNumber := 0) as initializerOnly1
) docIdNumbers ON t.docid = docIdNumbers.docid
INNER JOIN (SELECT @prevDocId := '') as initializerOnly2
关于mysql - 在 MySQL 中使用序列号和空格对重复值进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14034891/