U8查询未完成订单
查询订单完成状况
use UFDATA_003_2018
select * from SO_SOMain inner join SO_SODetails on SO_SODetails.ID=SO_SOMain.ID where SO_SOMain.ID in(
select distinct SO_SOMain.ID from SO_SOMain inner join SO_SODetails on SO_SODetails.ID=SO_SOMain.ID where iQuantity>iFHQuantity and dDate>'2018-01-01'
)
该查询语句必须这样来处理,否则会破坏订单的完整性,有的订单可能有一部分完成,其他部分未完成,容易导致订单不完整
查询当月生产克重
select SUM(b.cFree3*b.iQuantity)/SUM(b.iQuantity) as 克重 from rdrecord10 as a
left join rdrecords10 as b on a.ID=b.ID
where a.dDate between '2019-01-26' and '2019-02-25'
查询供应商分类
select 'vd'+a.cVenCode as 供应商,a.cInvCode as 材料名称,inv.cInvName as 品名,vd.cVenName as 供应商 from(select rds.cInvCode,rd.cVenCode from RdRecord01 rd
left join RdRecords01 rds on rd.ID=rds.ID
group by rds.cInvCode,rd.cVenCode) as a
left join Vendor as vd on vd.cVenCode=a.cVenCode
left join Inventory as inv on inv.cInvCode=a.cInvCode
winXP连接WIN10打印机最正确的操作
int* (*a[5])(int, char*); 是什么意思
这两天学习C语言,遇到这样一个定义 int* (*a[5])(int, char*);
一眼望去,头大,
找了好多解读总算搞明白了,下面把自己的感想记录一下
网上的结果
我们知道 类型 变量 ;
表示的定义一个变量如果是这种形式 类型 变量();
表示声明一个函数
这个表达式 int* (*a[5])(int, char*);
从轮廓上看,是声明一个函数,函数的返回值是一个整形的指针
- int* 表示是一个int型指针;
(*a[5])(int, char*)
中的a[5]
表示是一个有5个元素的数组- 而
(*)(int, char*)
则表示指向一个函数的指针,该函数有两个参数,第一个参数为int型,第二个是字符指针型 - 结合前面部分,表示这个函数的返回类型为int型,所以
(*a[5])(int, char*)
为5个返回类型为int型函数组成的数组; - 整个结合起来
int* (*a[5])(int, char*);
就是指向5个返回类型为int型函数组成的数组的指针变量,变量名为a. 本质是指向数组的指针,该数组是函数而已。
上面是百度知道找到的我的理解
- 类型为指针
- 5个元素的数组
- 数组的元素为函数的指针
- 函数的参数有两个
- 总结起来是,类型为指针的含有五个元素的数组,注意最终是数组
关于java初始化的讨论
在CSDN论坛上看到的,一个帖子的回复
cheuqoi的回复
前几天我刚刚买了这本书《疯狂Java:突破程序员基本功的16课@李刚》,我看了前3章,感觉还是相当不错的。
尤其是第3章讲的HashMap、HashSet、TreeSet、TreeMap的实现细节,可以说非常透彻。
关于楼主提出的2点,我有点疑问
第一个说法是楼主自己想出来的?还是没记清?正好我手边有书,我把书上原话敲出来:
数组的初始化有两种方式:
- 静态初始化:初始化时由程序员显式指定每个数组元素的初始值,由系统决定数组长度。
- 动态初始化:初始化时程序员只指定数组长度,由系统为数组元素分配初始值。
我觉得这个总结很到位啊,不知道这有什么问题?楼主能说说吗?
书中的代码:
//采用静态初始化方式初始化第一个数组
String[] books = new String[]
{
"疯狂Java讲义",
"轻量级Java EE企业应用实战",
"疯狂Ajax讲义",
"疯狂XML讲义"
};
//采用静态初始化的简化形式初始化第二个数组
String[] names =
{
"孙悟空",
"猪八戒",
"白骨精"
};
//采用动态初始化的语法初始化第三个数组
String[] strArr = new String[5];
与楼主的“所谓动态就是使用用new了”好像不是一回事?我仔细翻了书,好像没看到李刚书中有这句话啊。
感觉楼主是自己搞了错误的概念,然后自己“震精”自己啊!
至于楼主说的第二个问题,
String[] a = {"eee"};
String[] b = a;//这个b没有被初始化
就我个人觉得,这种方式我还真不觉得叫初始化!
比如我们初始化一个对象,是不是意味着重新分配内存,如果是对象,是不是要调用这个对象的初始化块、构造器进行初始化?但第二条代码还真没有这些过程!!它只是将一个引用指向另一个已经存在的数组。
例如我们这样写
Object obj1 = new Object();
Object obj2 = obj1;
我觉得这里只初始化了一个Java对象!难道楼主认为这里初始化了几个对象?
再者!我要告诉楼主一个基本概念:对象(包括数组)才需要初始化!
当然,就我个人的感觉,这种概念性的东西其实没必要在名称上纠缠。
让我们来看看书中解释:
始终记住:Java的数组变量是引用类型的变量,它并不是数组对象本身,只要让数组变量指向有效的数组对象,程序中即可使用该数组变量。
...
我们说对数组执行初始化,其实并不是要对数组变量执行初始化,而是要对数组对象执行初始化——也就是为该数组对象分配一块内存空间。虽然上面程序中的prices变量看似没有经过初始化,但执行prices = nums;就会让prices变量直接指向一个已经执行初始化的数组。
我觉得书中的说明其实很中允(注意文中用的是“看似”),恕我技术不行,我实在看不出这段解释有任何问题。
反倒是楼主,你所认为的String[] b = a;语句是初始化!我还真不觉得是初始化!
关于对象初始化,我想说下我的观点。
String[] a = {"test"};
String[] b = a;
b 是经过初始化的。
### wakeUpDoNottLazy的回复
原因:所谓“初始化”是对“对象 ”而言,而不是对象的引用。
那么 b 这个引用,所引用的对象是什么呢?无疑就是 “{"test"}” 这个数组。也就是说 b 所引用的对象在
String[] a = {"test"}; 时经历了初始化。
对象不初始化是不能使用的啊
我在初学 SSH 的时候看过李刚的一本书,怎么说呢。....不完美,但有所获。总体来说不敢恭维。
String[] a = {"test"}; 时经历了初始化。这点我完全同意啊。
我的意思是:
String[] b = a; 这条代码。这里是否有经过初始化呢?你说之前就对数组对象初始化了,这也没错啊。
我想问: 这里到底初始化了几个对象?
只有一个吧!
我觉得String[] b = a; 这条代码没有任何初始化动作吧?\,它只是让一个引用变量指向另一个已有的对象,谈不上什么初始化吧!要说初始化,也是由String[] a = {"test"}; 这条代码完成的!!与String[] b = a无关!!.