我有以下架构
Table: Product
Columns :
Product_ID
Product_Name
Table: Sales_Detail
Columns :
Sales_Detail_ID
Product_ID
Quantity
Total_Sales
..
..
我想要做的是使用以下查询显示每日销售额。
SELECT Prouduct_ID, SUM(sd.Quantity), SUM(sd.Selling_Rate) FROM SalesDetail sd WHERE DATE(Date_Time)=CURDATE() GROUP BY Product_ID
从结果中获取产品名称和产品ID。我怎么做。我浏览了互联网上的资源,但非可以帮助我找到正确的方法。
答案 0 :(得分:0)
我实际上没有Hibernate来测试它,但是这个HQL查询可能是一个好的开始:
SELECT
sd.Product_ID,
p.Product_Name,
SUM(sd.Quantity),
SUM(sd.Selling_Rate)
FROM
SalesDetail sd
INNER JOIN Product p
WHERE
p.Product_ID = sd.Product_ID AND
sd.Date_Time > CURRENT_DATE()
GROUP BY
sd.Product_ID, p.Product_Name
我不知道Date_Time
来自哪里,但我在猜表SalesDetail
。
我不确定DATE(Date_Time)
是否可行,所以我使用了sd.Date_Time > CURRENT_DATE()
,但您应该计算出HQL的时间范围,而是使用类似sd.Date_Time BETWEEN :dateTimeStart AND :dateTimeEnd
的内容。有关如何绑定日期参数的详细信息,请参阅HQL to query records between two dates。
答案 1 :(得分:0)
好的,这就是我所做的,它解决了我的问题。这实际上很简单但很棘手。
主要关注SELECT
查询。这里productHeader是ProductHeader
类的对象,它引用数据库中的product_header
命名表。 Product_ID
product_header
表的主键选为productHeader.Product_ID
,(PRODUCT_HEADER_OBJECT.PRIMARY_KEY_ATTRIBUTE)
Session session = null;
try{
session = sessionFactory.openSession();
session.beginTransaction();
/*Query to get the daily sales report. This query will provide current date as input and sum the total product quanitity sold and total sales selling rate*/
Query query = session.createQuery("SELECT productHeader.Product_ID, SUM(s.Quantity) as Quantity, SUM(Total) FROM SalesDetail s WHERE DATE(Date_Time)=CURDATE() GROUP BY Product_ID");
List<Object[]> groupList = query.list();
session.getTransaction().commit();
session.close();
ProductHeader productHeader = new ProductHeader();
for(Object[] arr : groupList){
productHeader =null;
String productID = (String) arr[0]; //the first index in the object array list is productID
//as it is the first one defined in the HQL query above
double quantity = (double) arr[1];
double totalSales = (double)arr[2];
session = sessionFactory.openSession();
session.beginTransaction();
/*Getting the product header class by passing primary key value to session.get() method*/
productHeader = (ProductHeader) session.get(ProductHeader.class, productID);
String productName = productHeader.getProduct_Name();
DailySales dailySales= new DailySales();
dailySales.setSn(billSN);
dailySales.setProductID(productID);
dailySales.setPrductName(productName);
dailySales.setQuantitySold(quantity);
dailySales.setSalesAmount(totalSales);
data.add(dailySales);
tblDailySales.setItems(data);
System.out.println("From object parsing "+Arrays.toString(arr));
}
} catch (Exception e) {
System.out.println("Error while populating daily sales table : " + e.getMessage());
}