我想像资源表那样创建报告
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 |
任何人都可以帮助我
答案 0 :(得分:1)
以下查询可以满足您的需求。它有三个特殊功能。
首先,它使用递增的@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