数据库里有每天一条的日记录,两个字段分别是年月日(nvarchar型),如1980-08-23,另一个字段是日天气现象(nvarchar型),如雨,雾。统计出每年天气现象中出现“大风”的天数,结果如下:
1954 8
1955 16
……现在希望把统计的结果修改至另一个表中,表里的结构如下:
年(nvarchar型),年大风日数(int)--全部为0
1954 0
1955 0
1956 0要把统计好的数据修改至后面的表中,该怎么操作呢?
是不是需要在第一步把年和次数都存为数组,再进行第二步呢
1954 8
1955 16
……现在希望把统计的结果修改至另一个表中,表里的结构如下:
年(nvarchar型),年大风日数(int)--全部为0
1954 0
1955 0
1956 0要把统计好的数据修改至后面的表中,该怎么操作呢?
是不是需要在第一步把年和次数都存为数组,再进行第二步呢
解决方案 »
- 关于一次打印若干种不同的纸张
- 输入法编码字符中有阿拉伯数字,码表怎么处理?
- 谁可以指点一下,如何把DATE 类型转换成CHAR[],谢谢了
- 求一个图像处理算法的思路!
- 有没有哪位大哥给点文件系统驱动(win2000/xp)方面的资料?
- 得到了IHTMLDocument2的接口,如何让其中的某个IHTMLElement获得焦点?
- vc做的com,在vb里调用没问题,为什么在asp中有问题呀!
- 如何理解"若AfxOleInit 从 MFC DLL 调用,则调用将失败"
- VS+QT 读tablewidget表格内容,最后一行读报错,代码如下,请大神指点
- IE设置?
- 求助:双击事件消息
- 请教如何从表A中把统计得到的数据修改至表B中,急!
---select year,weather,count(1) NUM from 1 group by year,weather;
将结果更新到第二个表就完全可以了~
update 2 set 2.cnt = (select num from (select year,weather,count(1) NUM from 1 group by year,weather )a
where a.year = 2.year
and a.weather = 2.weather );
如果想建临时表用上面的语句就可以;
如果想一句话搞定用下面的试一下;
我搜索第一个表的语句是
SELECT left(年月日,4) as 年,count(*) AS Expr1 FROM DateData WHERE 日天气现象 like '%大风%' group by left(年月日,4) Having count(*)>1
这样既可(假设两列 year 和 count)
SELECT year, 0 AS [count] INTO test2
FROM test1;
(因为count是保留字,所以要用[])
例如:
表a中得到是
年 出现大风次数
1955 1
1957 1
表b中是有
年 出现大风次数(次数全为零)
1955 0
1956 0
1957 0
怎么把统计得到的数据修改到表b中呢,而且a中统计为0时年份不显示
{
_RecordsetPtr Rs1;//定义Recordset对象
_bstr_t Connect("DSN=GMS;UID=sa;PWD=;");//定义连接字符串
_bstr_t Source ("SELECT count(*) FROM buaa.mdb010");//要执行的SQL语句
::CoInitialize(NULL);//初始化Rs1对象
HRESUL hr = Rs1.CreateInstance( __uuidof( Recordset ) );
//省略对返回值hr的判断
Rs1->Open( Source,
Connect,
adOpenForwardOnly,
adLockReadOnly,
-1 );
_variant_t temp=Rs1->GetCollect(_variant_t((long)0));
CString strTemp=(char* )(_bstr_t)temp;
MessageBox("OK!"+strTemp);
}
----这个是我从网上找到的例子,要同时打开另一个记录集,为什么定义个_RecordsetPtr Rs2不行呢
shakaqrj:你的这句SELECT year, 0 AS [count] INTO test2 FROM test1;运行不了啊
我对第一个记录集进行搜索的语句是
SELECT left(年月日,4) as 年,count(*) AS Expr1 FROM DateData WHERE 日天气现象 like '%大风%' group by left(年月日,4) Having count(*)>1,即每年出现“大风”的次数
_bstr_t Source ("SELECT left(年月日,4) as 年,count(*) AS Expr1 FROM DateData WHERE 日天气现象 like '%大风%' group by left(年月日,4) order by 年");
bstr_t Source2 ("UPDATE DateData LEFT JOIN YearData ON DateData.年 = YearData.年 SET DateData.Expr1 = YearData.年大风日数;");
m_pRecordset->Open(Source, Connect, adOpenForwardOnly, adLockReadOnly, -1);
m_pRecordset2->Open(Source2, Connect, adOpenForwardOnly, adLockReadOnly, -1);
还是不行。。
_bstr_t Source2("UPDATA YearData SET YearData.年大风日数=DataData.Expr1 from YearData LEFT JOIN DataData58549 ON YearData.年 = DataData.年");//将统计结果更新至年数据表中
::CoInitialize(NULL);
HRESULT hr = m_pRecordset.CreateInstance( __uuidof(Recordset) );
HRESULT hr2 = m_pRecordset2.CreateInstance( __uuidof(Recordset) );
m_pRecordset->Open(Source, Connect, adOpenForwardOnly, adLockReadOnly, -1);
m_pRecordset2->Open(Source2, Connect, adOpenForwardOnly, adLockReadOnly, -1);
这个是我最后修改的语句,用execute是只读的不能写,所以用了open形式。为什么还出错啊,真找不出原因了
可以考虑这样弄。
1 清空表b
2 打开表a--用楼上的Select语句
3 读写方式打开表b
4 克隆一下表a的记录集指针.
5 批量更新来保存表b内容
set 年大风日数 =(select count(*) FROM DateData58549 WHERE 日天气现象 like '%大风%'
AND LEFT(年月日,4)=YearData58549.年)
这个方法可行,希望对大家有帮助