两个SQL语句怎么合并嗯???

时间:2022-04-22 21:55:39
string time1 = dateTimePicker1.Value.Date.ToShortDateString();
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  支出项目"; 


我想实现通过一段时间内的查询
两个SQL语句怎么合并嗯???
得出统计表:
两个SQL语句怎么合并嗯???

我想了好久,都没做出来,我还是个学生,想多学习一些,如果真的不能做出来了,请给我一些更好的方法!!谢谢大家了!!! 两个SQL语句怎么合并嗯???两个SQL语句怎么合并嗯???两个SQL语句怎么合并嗯???

26 个解决方案

#1


select xxxxxx
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


引用 5 楼 u010054927 的回复:
我收入项目和支出项目记录数是不一样得哦!!


不一样没法合并。

#7


引用 4 楼 gxingmin 的回复:
如果不一样,你怎么合并啊

所以我不知道该怎么办了嗯,,,有没有好方法介绍下??

#8


引用 3 楼 starfd 的回复:


好吧,无视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


引用 6 楼 duanzi_peng 的回复:
Quote: 引用 5 楼 u010054927 的回复:

我收入项目和支出项目记录数是不一样得哦!!


不一样没法合并。

那有没有别的方法可以实现呢??

#11


引用 8 楼 starfd 的回复:
Quote: 引用 3 楼 starfd 的回复:


好吧,无视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


引用 12 楼 gxingmin 的回复:
假如收入只有1项,支出100项,你这个界面多难看?
你还是重新设计一下界面吧,不要这样布局


这个我也想到了,但是现在的问题是收入表和支出表是分别的两张表,但是我现在又想弄一个类似报表的东西,来展现收支统计这一块,但是用VS2010自带的报表的话,我就弄不出通过时间进行统计查询了嗯,但是用数据表的话,一个还好,我之前弄不出来的时候我还弄了两个,界面真心不美观,我现在就差这最后一步了,始终是弄不出来!!所以现在很虐心啊!!!求你们了大师!!!!

#15


 用 union all

#16


给你建议:1、
select xxxxxx
union all
select xxxx 

2、9楼和13楼得方法都可以,13楼得估计你还得学一阵子,9楼得可以

前提是你的数据库列数字段名必须相同

#17


引用 16 楼 pard521 的回复:
给你建议: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


初学,露个脸 两个SQL语句怎么合并嗯???

#24


该回复于2013-03-28 11:28:16被管理员删除

#25


该回复于2013-03-28 11:28:16被管理员删除

#26


该回复于2013-03-28 11:26:57被管理员删除

#1


select xxxxxx
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


引用 5 楼 u010054927 的回复:
我收入项目和支出项目记录数是不一样得哦!!


不一样没法合并。

#7


引用 4 楼 gxingmin 的回复:
如果不一样,你怎么合并啊

所以我不知道该怎么办了嗯,,,有没有好方法介绍下??

#8


引用 3 楼 starfd 的回复:


好吧,无视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


引用 6 楼 duanzi_peng 的回复:
Quote: 引用 5 楼 u010054927 的回复:

我收入项目和支出项目记录数是不一样得哦!!


不一样没法合并。

那有没有别的方法可以实现呢??

#11


引用 8 楼 starfd 的回复:
Quote: 引用 3 楼 starfd 的回复:


好吧,无视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


引用 12 楼 gxingmin 的回复:
假如收入只有1项,支出100项,你这个界面多难看?
你还是重新设计一下界面吧,不要这样布局


这个我也想到了,但是现在的问题是收入表和支出表是分别的两张表,但是我现在又想弄一个类似报表的东西,来展现收支统计这一块,但是用VS2010自带的报表的话,我就弄不出通过时间进行统计查询了嗯,但是用数据表的话,一个还好,我之前弄不出来的时候我还弄了两个,界面真心不美观,我现在就差这最后一步了,始终是弄不出来!!所以现在很虐心啊!!!求你们了大师!!!!

#15


 用 union all

#16


给你建议:1、
select xxxxxx
union all
select xxxx 

2、9楼和13楼得方法都可以,13楼得估计你还得学一阵子,9楼得可以

前提是你的数据库列数字段名必须相同

#17


引用 16 楼 pard521 的回复:
给你建议: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


初学,露个脸 两个SQL语句怎么合并嗯???

#23


#24


该回复于2013-03-28 11:28:16被管理员删除

#25


该回复于2013-03-28 11:28:16被管理员删除

#26


该回复于2013-03-28 11:26:57被管理员删除