已知 ACCESS 里有表 A1 和表A2
A1 ID 日期 产量 1 2010-1-1 1
2 2010-1-1 1
3 2010-1-1 1
4 2010-1-3 1
5 2010-1-3 1
6 2010-1-3 1
7 2010-1-4 1
8 2010-1-5 1A2 ID 明细 用量
1 1 2
1 2 1
1 1 5
2 7 4
2 8 1.9
1 3 1
1 5 2
3 1 1
3 2 1
3 5 3
4 1 1
4 2 1
4 3 2
4 6 4
5 5 7
5 7 2.2
5 4 3
5 1 1
5 2 6
5 1 1
7 2 6.7
7 3 2
7 2 1
8 1 1
8 2 3
1 4 7
7 2 3.8
7 2 3
6 1 2
现在要根据日期 求每天的明细用量和
最好的形式是日期 (自动生成1-N列)1 2 3 4 5 6 7 8 产量
2010-1-1 8 2 1 7 5 4 1.9 3
2010-1-3 5 7 2 3 7 4 2.2 3
2010-1-4 1 13.5 2 1
2010-1-5 1 3 1
A1 ID 日期 产量 1 2010-1-1 1
2 2010-1-1 1
3 2010-1-1 1
4 2010-1-3 1
5 2010-1-3 1
6 2010-1-3 1
7 2010-1-4 1
8 2010-1-5 1A2 ID 明细 用量
1 1 2
1 2 1
1 1 5
2 7 4
2 8 1.9
1 3 1
1 5 2
3 1 1
3 2 1
3 5 3
4 1 1
4 2 1
4 3 2
4 6 4
5 5 7
5 7 2.2
5 4 3
5 1 1
5 2 6
5 1 1
7 2 6.7
7 3 2
7 2 1
8 1 1
8 2 3
1 4 7
7 2 3.8
7 2 3
6 1 2
现在要根据日期 求每天的明细用量和
最好的形式是日期 (自动生成1-N列)1 2 3 4 5 6 7 8 产量
2010-1-1 8 2 1 7 5 4 1.9 3
2010-1-3 5 7 2 3 7 4 2.2 3
2010-1-4 1 13.5 2 1
2010-1-5 1 3 1
A1 ID 日期 产量 1 2010-1-1 1
2 2010-1-1 1
3 2010-1-1 1
4 2010-1-3 1
5 2010-1-3 1
6 2010-1-3 1
7 2010-1-4 1
8 2010-1-5 1A2 ID 明细 用量
1 1 2
1 2 1
1 1 5
2 7 4
2 8 1.9
1 3 1
1 5 2
3 1 1
3 2 1
3 5 3
4 1 1
4 2 1
4 3 2
4 6 4
5 5 7
5 7 2.2
5 4 3
5 1 1
5 2 6
5 1 1
7 2 6.7
7 3 2
7 2 1
8 1 1
8 2 3
1 4 7
7 2 3.8
7 2 3
6 1 2
现在要根据日期 求每天的明细用量和
最好的形式是日期 (自动生成1-N列)1 2 3 4 5 6 7 8 产量
2010-1-1 8 2 1 7 5 4 1.9 3
2010-1-3 5 7 2 3 7 4 2.2 3
2010-1-4 1 13.5 2 1
2010-1-5 1 3 1
比如说 2010-1-1 这天 共生产了3件货 然后 材料1 用了多少 材料2 用了多少 就是求这个
, SUM(IIF(B.明细 = '1', B.用量, 0)) AS '1'
, SUM(IIF(B.明细 = '2', B.用量, 0)) AS '2'
, SUM(IIF(B.明细 = '3', B.用量, 0)) AS '3'
, SUM(IIF(B.明细 = '4', B.用量, 0)) AS '4'
, SUM(IIF(B.明细 = '5', B.用量, 0)) AS '5'
, SUM(IIF(B.明细 = '6', B.用量, 0)) AS '6'
, SUM(IIF(B.明细 = '7', B.用量, 0)) AS '7'
, SUM(IIF(B.明细 = '8', B.用量, 0)) AS '8'
, A.产量
FROM A1 A
, A2 B
WHERE A.ID = B.ID
GROUP BY A.日期
ORDER BY A.日期
但可以用vb和sql结合可以完成先查询有多少列,
select max(明细) from A2
获取最大列然后通过循环获取sqlstrsql = ""
strsql = strsql & " SELECT A.日期 " & vbCrLfFor i = 1 To rs.fields(0)
strsql = strsql & " , SUM(IIF(B.明细 = '" & LTrim(Str(i)) & "', B.用量, 0)) AS '" & i & "' " & vbCrLf
Next istrsql = strsql & " , A.产量 " & vbCrLf
strsql = strsql & " FROM A1 A " & vbCrLf
strsql = strsql & " , A2 B " & vbCrLf
strsql = strsql & " Where a.ID = b.ID " & vbCrLf
strsql = strsql & " GROUP BY A.日期 " & vbCrLf
strsql = strsql & " ORDER BY A.日期 "
不过实在没看懂。你举的例子 结果似乎不对.
只用 A1表来测试,下面语句 自动生成 ID 横排,有多少ID 就有多少列,
语法 如下: 请据此修改为你想要的。s = "TRANSFORM Sum(A1.ID)" & vbCrLf
s = s & "SELECT A1.日期" & vbCrLf
s = s & "FROM A1 GROUP BY A1.日期 PIVOT A1.ID"
Set rs = New ADODB.Recordset
strSql = "SELECT Requirement(解释一下:这个是用来排列的列) from MixingType(这是一个表) group by Requirement"
rs.Open strSql, conn, adOpenKeyset, adLockOptimisticIf rs.BOF Or rs.EOF Then
MsgBox "没有任何您需要查找的信息,请确认好查找条件后重新查找", vbInformation, "提示"
Exit Sub
End IfDo While Not rs.EOF
HNTSCQKQDJS.ListView1.ColumnHeaders.Add , , rs.Fields("Requirement"), 1400
rs.MoveNext
SELECT 日期, 产量1
FROM
(select a1.日期, 明细, 用量, 产量1
from a1, a2, (select 日期, sum(产量) as 产量1 from a1 group by 日期) a3
where a1.id=a2.id and a1.日期=a3.日期
)
GROUP BY 日期, 产量1
PIVOT 明细
SELECT 日期, 产量
FROM
(select a1.日期, 明细, 用量, 产量
from a1, a2, (select 日期, sum(a1.产量) as 产量 from a1 group by 日期) a3
where a1.id=a2.id and a1.日期=a3.日期
)
GROUP BY 日期, 产量
PIVOT 明细
这个sqlTRANSFORM sum(用量)
SELECT 日期, 产量
FROM
(select a1.日期, 明细, 用量, 产量
from a1, a2, (select 日期, sum(a1.产量) as 产量 from a1 group by 日期) a3
where a1.id=a2.id and a1.日期=a3.日期
)
GROUP BY 日期, 产量
PIVOT 明细的结果日期 产量 1 2 3 4 5 6 7 8
2010-01-01 3 8 2 1 7 5 4 1.89999997615814
2010-01-03 3 4 1 2 3 7 4 2.20000004768372
2010-01-04 1 14.4999997615814 2
2010-01-05 1 1 3
我的是vb LISTVIEW 控件
特别是列 1-N 的列 而且还是数据对应 我改怎么做啊?
窗口.ListView1.ColumnHeaders.Add , , rs.Fields("1-N的字段名"), 1400
rs.MoveNext
Loop
窗口.ListView1.ColumnHeaders.Add (rs.RecordCount + 3), , "产量", 1400
rs.Close
但是数据怎么添加进去啊