创建表名为imatdochd 字段为 doccode Varchar(50) 单号; Docdate datetime 日期; Companyid Varchar(30) 公司; Docsatus smallint 状态; sumtotalmoney money 总金额; keyid 自增自段 序列; 主键 DOCCODE 索引 对docdate增加[集聚索引]
时间: 2024-03-16 20:45:31 浏览: 13
你可以使用以下 SQL 语句创建该表及索引:
```
CREATE TABLE imatdochd (
doccode VARCHAR(50) NOT NULL,
docdate DATETIME NOT NULL,
companyid VARCHAR(30) NOT NULL,
docsatus SMALLINT NOT NULL,
sumtotalmoney MONEY NOT NULL,
keyid INT IDENTITY(1,1) NOT NULL,
CONSTRAINT PK_imatdochd PRIMARY KEY (doccode)
)
CREATE CLUSTERED INDEX CI_imatdochd_docdate ON imatdochd (docdate)
```
其中,`CREATE TABLE` 用于创建表,`CREATE CLUSTERED INDEX` 用于创建聚集索引(也称为集聚索引),`CONSTRAINT` 用于创建主键约束,`IDENTITY(1,1)` 用于自动生成 `keyid` 的值,`NOT NULL` 用于指定字段不允许为空。
相关问题
JAVA对list的数据按docCode属性进行分组,对qty求和,最后形成一个新的list
可以使用Java 8的Stream API来实现对list的数据按docCode属性进行分组,对qty求和,最后形成一个新的list。具体代码实现如下:
```java
import java.util.*;
import java.util.stream.Collectors;
public class GroupListByProperty {
public static void main(String[] args) {
List<Item> itemList = Arrays.asList(
new Item("A001", "item1", 10),
new Item("A001", "item2", 20),
new Item("A002", "item3", 30),
new Item("A002", "item4", 40),
new Item("A003", "item5", 50)
);
Map<String, Integer> qtyByDocCode = itemList.stream()
.collect(Collectors.groupingBy(Item::getDocCode, Collectors.summingInt(Item::getQty)));
List<ItemSummary> itemSummaryList = qtyByDocCode.entrySet().stream()
.map(entry -> new ItemSummary(entry.getKey(), entry.getValue()))
.collect(Collectors.toList());
System.out.println(itemSummaryList);
}
}
class Item {
private String docCode;
private String itemName;
private int qty;
public Item(String docCode, String itemName, int qty) {
this.docCode = docCode;
this.itemName = itemName;
this.qty = qty;
}
public String getDocCode() {
return docCode;
}
public String getItemName() {
return itemName;
}
public int getQty() {
return qty;
}
}
class ItemSummary {
private String docCode;
private int totalQty;
public ItemSummary(String docCode, int totalQty) {
this.docCode = docCode;
this.totalQty = totalQty;
}
public String getDocCode() {
return docCode;
}
public int getTotalQty() {
return totalQty;
}
@Override
public String toString() {
return "ItemSummary{" +
"docCode='" + docCode + '\'' +
", totalQty=" + totalQty +
'}';
}
}
```
这段代码中,首先定义了一个Item类,用于表示list中的每个元素,包括docCode、itemName和qty三个属性。然后定义了一个ItemSummary类,用于表示最终的分组求和结果,包括docCode和totalQty两个属性。
在main方法中,首先定义了一个itemList,用于存储原始数据。然后使用Java 8的Stream API,先对itemList进行分组,按照docCode属性进行分组,对qty属性进行求和,得到一个Map<String, Integer>类型的结果qtyByDocCode。最后,使用Stream API中的map和collect方法,将qtyByDocCode转换成最终的itemSummaryList,即按照docCode属性分组后,对qty属性求和的结果。
上述代码执行结果为:
```
[ItemSummary{docCode='A001', totalQty=30}, ItemSummary{docCode='A002', totalQty=70}, ItemSummary{docCode='A003', totalQty=50}]
```
其中,每个ItemSummary对象表示一个docCode属性值对应的qty属性值之和。
JAVA对list的数据按docCode属性进行分组,对int类型的qty和double类型的wt求和,将求和后的数据插入到detaillist数组的qty和wt
可以使用Java 8的Stream API来实现对list的数据按docCode属性进行分组,对int类型的qty和double类型的wt求和,将求和后的数据插入到detaillist数组的qty和wt。具体代码实现如下:
```java
import java.util.*;
import java.util.stream.Collectors;
public class GroupListByProperty {
public static void main(String[] args) {
List<Detail> detailList = Arrays.asList(
new Detail("A001", 10, 1.0),
new Detail("A001", 20, 2.0),
new Detail("A002", 30, 3.0),
new Detail("A002", 40, 4.0),
new Detail("A003", 50, 5.0)
);
Map<String, Summary> summaryByDocCode = detailList.stream()
.collect(Collectors.groupingBy(Detail::getDocCode, Collectors.reducing(new Summary(), d -> new Summary(d.getQty(), d.getWt()), Summary::add)));
detailList.forEach(detail -> {
Summary summary = summaryByDocCode.get(detail.getDocCode());
detail.setQty(summary.getQty());
detail.setWt(summary.getWt());
});
System.out.println(detailList);
}
}
class Detail {
private String docCode;
private int qty;
private double wt;
public Detail(String docCode, int qty, double wt) {
this.docCode = docCode;
this.qty = qty;
this.wt = wt;
}
public String getDocCode() {
return docCode;
}
public int getQty() {
return qty;
}
public void setQty(int qty) {
this.qty = qty;
}
public double getWt() {
return wt;
}
public void setWt(double wt) {
this.wt = wt;
}
@Override
public String toString() {
return "Detail{" +
"docCode='" + docCode + '\'' +
", qty=" + qty +
", wt=" + wt +
'}';
}
}
class Summary {
private int qty;
private double wt;
public Summary() {
this.qty = 0;
this.wt = 0.0;
}
public Summary(int qty, double wt) {
this.qty = qty;
this.wt = wt;
}
public int getQty() {
return qty;
}
public double getWt() {
return wt;
}
public Summary add(Summary other) {
return new Summary(qty + other.qty, wt + other.wt);
}
}
```
这段代码中,首先定义了一个Detail类,用于表示list中的每个元素,包括docCode、qty和wt三个属性。然后定义了一个Summary类,用于表示每个docCode对应的qty和wt属性之和。
在main方法中,首先定义了一个detailList,用于存储原始数据。然后使用Java 8的Stream API,先对detailList进行分组,按照docCode属性进行分组,对qty和wt属性进行求和,得到一个Map<String, Summary>类型的结果summaryByDocCode。最后,使用forEach方法遍历detailList,根据docCode从summaryByDocCode中获取对应的Summary对象,然后将其qty和wt属性的值设置到当前的detail对象中。
上述代码执行结果为:
```
[Detail{docCode='A001', qty=30, wt=3.0}, Detail{docCode='A001', qty=30, wt=6.0}, Detail{docCode='A002', qty=70, wt=21.0}, Detail{docCode='A002', qty=70, wt=28.0}, Detail{docCode='A003', qty=50, wt=25.0}]
```
其中,每个Detail对象表示一个docCode属性值对应的qty和wt属性值之和。