我正在尝试透视def search_files(folderid, search):
files = session.query(file).filter(
file.parentid==folderid,
file.name.ilike('%{}%'.format(search))).all()
folders = session.query(folder.ID).filter_by(parentid=folderid).all()
for folder in folders:
files+=search_files(folder.id, search)
return files
(join_date
)列并按年份+月分组并按datetime
分组,并且必须是动态的,因为日期会发生变化。
表
mtype
期望的结果
+-------+------------------+
| Mtype | join_date |
+-------+------------------+
| A | 28/05/2014 00:00 |
| B | 04/11/2014 00:00 |
| C | 23/03/2007 00:00 |
| D | 04/09/2013 00:00 |
| E | 26/11/2014 00:00 |
| F | 24/07/2011 00:00 |
| G | 28/05/2014 00:00 |
| A | 20/06/2013 00:00 |
| B | 04/11/2014 00:00 |
| C | 20/06/2013 00:00 |
+-------+------------------+
这是我对查询的看法,但我无法弄清楚如何让Pivot正常工作
+-------+---------+---------+---------+---------+---------+---------+--------+--------+--------+
| Mtype | 2015-03 | 2015-02 | 2015-01 | 2014-12 | 2014-11 | 2014-10 | 2014-9 | 2014-8 | 2014-7 |
+-------+---------+---------+---------+---------+---------+---------+--------+--------+--------+
| A | 45 | 7 | 54 | 875 | 45 | 7 | 54 | 875 | 25 |
| B | 7 | 78 | 78 | 7 | 7 | 78 | 78 | 7 | 78 |
| C | 546 | 6 | 87 | 5 | 45 | 6 | 87 | 5 | 25 |
| D | 54 | 78 | 54 | 8 | 54 | 78 | 54 | 7 | 7 |
| E | 78 | 78 | 7 | 45 | 78 | 78 | 7 | 45 | 6 |
| F | 46 | 54 | 6 | 8 | 46 | 54 | 6 | 8 | 75 |
| G | 54 | 87 | 87 | 7 | 54 | 87 | 87 | 45 | 8 |
+-------+---------+---------+---------+---------+---------+---------+--------+--------+--------+
答案 0 :(得分:0)
这是生成输出的sql代码。
DECLARE @cols NVARCHAR (MAX)
DECLARE @query NVARCHAR (MAX)
SELECT @cols = COALESCE (@cols + ',[' + CONVERT(VARCHAR(7), join_date, 120) + ']',
'[' + CONVERT(VARCHAR(7), join_date, 120) + ']')
FROM (SELECT DISTINCT CONVERT(VARCHAR(7), join_date, 120) as join_date FROM Mdata) PV
ORDER BY join_date
SELECT @query = 'SELECT *
FROM
(
SELECT Mtype, CONVERT(VARCHAR(7), join_date, 120) as join_date FROM Mdata
) AS t
PIVOT
(
COUNT(join_date)
FOR join_date IN( ' + @cols + ' )' +
') AS p ;'
EXEC SP_EXECUTESQL @query
以下是结果的截屏。