string time2 = dateTimePicker2.Value.Date.ToShortDateString();
string sql1 = "select distinct 收入来源,count(收入来源),sum(收入金额) from 总收入表 where 收 入时间 between '" + time1 + "' and '" + time2 + "' group by 收入来源";
string sql2 = "select distinct 支出项目,count(支出项目),sum(支出金额) from 总支出表 where 支出时间 between '" + time1 + "' and '" + time2 + "' group by 支出项目";
我想实现通过一段时间内的查询
得出统计表:
我想了好久,都没做出来,我还是个学生,想多学习一些,如果真的不能做出来了,请给我一些更好的方法!!谢谢大家了!!!
26 个解决方案
#1
select xxxxxx
union all
selec xxxx
union all
selec xxxx
#2
你收入项目和支出项目记录数一样吗?
#3
select * from
(select distinct 收入来源,count(收入来源),sum(收入金额) from 总收入表 where 收 入时间 between '" + time1 + "' and '" + time2 + "' group by 收入来源) a,
(select distinct 支出项目,count(支出项目),sum(支出金额) from 总支出表 where 支出时间 between '" + time1 + "' and '" + time2 + "' group by 支出项目) b
你每个都查询只有一条数据,用笛卡尔就可以了
#4
如果不一样,你怎么合并啊
#5
我收入项目和支出项目记录数是不一样得哦!!
#6
不一样没法合并。
#7
所以我不知道该怎么办了嗯,,,有没有好方法介绍下??
#8
好吧,无视3楼这一段吧。。。
你这种与其纠结于如何合成1条sql,还不如在程序中通过展示的方式将两张表并成一张表。。。
收入项目和支出项目肯定不等的啊
#9
合并两个Table
protected DataTable MergeDataTable(DataTable dt1, DataTable dt2, string KeyColName,bool isMergeAll)
{
//合并列
DataTable ndt1 = dt1.Copy();
DataTable ndt2 = dt2.Copy();
ndt2.PrimaryKey = new DataColumn[] { ndt2.Columns[KeyColName] };
for (int i = 0; i < ndt2.Columns.Count; i++)
{
if (ndt2.Columns[i].ColumnName.ToLower().Trim() != KeyColName.ToLower().Trim())
{
ndt1.Columns.Add(ndt2.Columns[i].ColumnName);
}
}
//合并相同主键的数据
for (int i = 0; i < ndt1.Rows.Count; i++)
{
DataRow inrow = ndt2.Rows.Find(ndt1.Rows[i][KeyColName]);
if (inrow != null)
{
for (int j = 0; j < ndt2.Columns.Count; j++)
{
if (ndt2.Columns[j].ColumnName.ToLower().Trim() != KeyColName.ToLower().Trim())
{
ndt1.Rows[i][ndt2.Columns[j].ColumnName] = inrow[ndt2.Columns[j].ColumnName];
}
}
if (isMergeAll)
{
ndt2.Rows.Remove(inrow);
}
}
}
if (isMergeAll)
{
//合并不同主键的数据
for (int i = 0; i < ndt2.Rows.Count; i++)
{
DataRow row = ndt1.NewRow();
for (int j = 0; j < ndt2.Columns.Count; j++)
{
row[ndt2.Columns[j].ColumnName] = ndt2.Rows[i][ndt2.Columns[j].ColumnName];
}
ndt1.Rows.Add(row);
}
}
return ndt1;
}
#10
那有没有别的方法可以实现呢??
#11
好吧,无视3楼这一段吧。。。
你这种与其纠结于如何合成1条sql,还不如在程序中通过展示的方式将两张表并成一张表。。。
收入项目和支出项目肯定不等的啊
那该怎么弄呢?我现在茫然的很,完全就不知道咋个弄了??
#12
假如收入只有1项,支出100项,你这个界面多难看?
你还是重新设计一下界面吧,不要这样布局
你还是重新设计一下界面吧,不要这样布局
#13
List<收入实体> list1;
List<支出实体> list2;
int maxCount = Math.Max(list1.Count,list2.Count);
for(int i=list1.Count;i<maxCount;i++)
{
list1.Add(new 收入实体());
}
for(int i=list2.Count;i<maxCount;i++)
{
list2.Add(new 支出实体());
}
List<绑定用的实体> list3 = new List<绑定用的实体>();
for(int i=0;i<maxCount ;i++)
{
list3.Add(new 绑定用的实体(){收入=list1[i],支出=list2[i]});
}
#14
假如收入只有1项,支出100项,你这个界面多难看?
你还是重新设计一下界面吧,不要这样布局
这个我也想到了,但是现在的问题是收入表和支出表是分别的两张表,但是我现在又想弄一个类似报表的东西,来展现收支统计这一块,但是用VS2010自带的报表的话,我就弄不出通过时间进行统计查询了嗯,但是用数据表的话,一个还好,我之前弄不出来的时候我还弄了两个,界面真心不美观,我现在就差这最后一步了,始终是弄不出来!!所以现在很虐心啊!!!求你们了大师!!!!
#15
用 union all
#16
给你建议:1、
2、9楼和13楼得方法都可以,13楼得估计你还得学一阵子,9楼得可以
前提是你的数据库列数字段名必须相同
select xxxxxx
union all
select xxxx
2、9楼和13楼得方法都可以,13楼得估计你还得学一阵子,9楼得可以
前提是你的数据库列数字段名必须相同
#17
给你建议:1、select xxxxxx
union all
select xxxx
2、9楼和13楼得方法都可以,13楼得估计你还得学一阵子,9楼得可以
前提是你的数据库列数字段名必须相同
查询出来的表结构必须相同~·
#18
比较推荐数据出来之后,对数据集进行操作,太复杂的SQL语句不太适合学生吧。
#19
学生做些复杂查询也挺不错的,也有趣吗.
不一样可以给查询结果重命名 .让名字一样
不一样可以给查询结果重命名 .让名字一样
#20
不一样的用别名,两个数据表的栏位一样,用Union纵向合并
#21
是在要一句sql
SELECT * FROM
(
select ROW_NUMBER() OVER (ORDER BY 收入来源) AS RowNum, 收入来源,count(1),sum(收入金额) from 总收入表 where 收入时间 between '" + time1 + "' and '" + time2 + "' group by 收入来源) t
FULL JOIN
(select ROW_NUMBER() OVER (ORDER BY 支出项目) AS RowNum,支出项目 ,count(1),sum(支出金额) from 总支出表 where 支出时间 between '" + time1 + "' and '" + time2 + "' group by 支出项目) t2
ON t.RowNum = t2.RowNum
#22
初学,露个脸
#24
#25
#26
#1
select xxxxxx
union all
selec xxxx
union all
selec xxxx
#2
你收入项目和支出项目记录数一样吗?
#3
select * from
(select distinct 收入来源,count(收入来源),sum(收入金额) from 总收入表 where 收 入时间 between '" + time1 + "' and '" + time2 + "' group by 收入来源) a,
(select distinct 支出项目,count(支出项目),sum(支出金额) from 总支出表 where 支出时间 between '" + time1 + "' and '" + time2 + "' group by 支出项目) b
你每个都查询只有一条数据,用笛卡尔就可以了
#4
如果不一样,你怎么合并啊
#5
我收入项目和支出项目记录数是不一样得哦!!
#6
我收入项目和支出项目记录数是不一样得哦!!
不一样没法合并。
#7
如果不一样,你怎么合并啊
所以我不知道该怎么办了嗯,,,有没有好方法介绍下??
#8
好吧,无视3楼这一段吧。。。
你这种与其纠结于如何合成1条sql,还不如在程序中通过展示的方式将两张表并成一张表。。。
收入项目和支出项目肯定不等的啊
#9
合并两个Table
protected DataTable MergeDataTable(DataTable dt1, DataTable dt2, string KeyColName,bool isMergeAll)
{
//合并列
DataTable ndt1 = dt1.Copy();
DataTable ndt2 = dt2.Copy();
ndt2.PrimaryKey = new DataColumn[] { ndt2.Columns[KeyColName] };
for (int i = 0; i < ndt2.Columns.Count; i++)
{
if (ndt2.Columns[i].ColumnName.ToLower().Trim() != KeyColName.ToLower().Trim())
{
ndt1.Columns.Add(ndt2.Columns[i].ColumnName);
}
}
//合并相同主键的数据
for (int i = 0; i < ndt1.Rows.Count; i++)
{
DataRow inrow = ndt2.Rows.Find(ndt1.Rows[i][KeyColName]);
if (inrow != null)
{
for (int j = 0; j < ndt2.Columns.Count; j++)
{
if (ndt2.Columns[j].ColumnName.ToLower().Trim() != KeyColName.ToLower().Trim())
{
ndt1.Rows[i][ndt2.Columns[j].ColumnName] = inrow[ndt2.Columns[j].ColumnName];
}
}
if (isMergeAll)
{
ndt2.Rows.Remove(inrow);
}
}
}
if (isMergeAll)
{
//合并不同主键的数据
for (int i = 0; i < ndt2.Rows.Count; i++)
{
DataRow row = ndt1.NewRow();
for (int j = 0; j < ndt2.Columns.Count; j++)
{
row[ndt2.Columns[j].ColumnName] = ndt2.Rows[i][ndt2.Columns[j].ColumnName];
}
ndt1.Rows.Add(row);
}
}
return ndt1;
}
#10
我收入项目和支出项目记录数是不一样得哦!!
不一样没法合并。
那有没有别的方法可以实现呢??
#11
好吧,无视3楼这一段吧。。。
你这种与其纠结于如何合成1条sql,还不如在程序中通过展示的方式将两张表并成一张表。。。
收入项目和支出项目肯定不等的啊
那该怎么弄呢?我现在茫然的很,完全就不知道咋个弄了??
#12
假如收入只有1项,支出100项,你这个界面多难看?
你还是重新设计一下界面吧,不要这样布局
你还是重新设计一下界面吧,不要这样布局
#13
List<收入实体> list1;
List<支出实体> list2;
int maxCount = Math.Max(list1.Count,list2.Count);
for(int i=list1.Count;i<maxCount;i++)
{
list1.Add(new 收入实体());
}
for(int i=list2.Count;i<maxCount;i++)
{
list2.Add(new 支出实体());
}
List<绑定用的实体> list3 = new List<绑定用的实体>();
for(int i=0;i<maxCount ;i++)
{
list3.Add(new 绑定用的实体(){收入=list1[i],支出=list2[i]});
}
#14
假如收入只有1项,支出100项,你这个界面多难看?
你还是重新设计一下界面吧,不要这样布局
这个我也想到了,但是现在的问题是收入表和支出表是分别的两张表,但是我现在又想弄一个类似报表的东西,来展现收支统计这一块,但是用VS2010自带的报表的话,我就弄不出通过时间进行统计查询了嗯,但是用数据表的话,一个还好,我之前弄不出来的时候我还弄了两个,界面真心不美观,我现在就差这最后一步了,始终是弄不出来!!所以现在很虐心啊!!!求你们了大师!!!!
#15
用 union all
#16
给你建议:1、
2、9楼和13楼得方法都可以,13楼得估计你还得学一阵子,9楼得可以
前提是你的数据库列数字段名必须相同
select xxxxxx
union all
select xxxx
2、9楼和13楼得方法都可以,13楼得估计你还得学一阵子,9楼得可以
前提是你的数据库列数字段名必须相同
#17
给你建议:1、select xxxxxx
union all
select xxxx
2、9楼和13楼得方法都可以,13楼得估计你还得学一阵子,9楼得可以
前提是你的数据库列数字段名必须相同
查询出来的表结构必须相同~·
#18
比较推荐数据出来之后,对数据集进行操作,太复杂的SQL语句不太适合学生吧。
#19
学生做些复杂查询也挺不错的,也有趣吗.
不一样可以给查询结果重命名 .让名字一样
不一样可以给查询结果重命名 .让名字一样
#20
不一样的用别名,两个数据表的栏位一样,用Union纵向合并
#21
是在要一句sql
SELECT * FROM
(
select ROW_NUMBER() OVER (ORDER BY 收入来源) AS RowNum, 收入来源,count(1),sum(收入金额) from 总收入表 where 收入时间 between '" + time1 + "' and '" + time2 + "' group by 收入来源) t
FULL JOIN
(select ROW_NUMBER() OVER (ORDER BY 支出项目) AS RowNum,支出项目 ,count(1),sum(支出金额) from 总支出表 where 支出时间 between '" + time1 + "' and '" + time2 + "' group by 支出项目) t2
ON t.RowNum = t2.RowNum
#22
初学,露个脸