From e601db107ee2bface82e8fdd1267c69814e50878 Mon Sep 17 00:00:00 2001 From: Jim Martens Date: Wed, 5 Jul 2017 13:34:32 +0200 Subject: [PATCH] Extended cross table query to allow different entries for location dimension Signed-off-by: Jim Martens --- 07/src/de/dis2017/MainAnalysis.java | 9 +++++---- 07/src/de/dis2017/data/db/ORM.java | 15 ++++++++++----- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/07/src/de/dis2017/MainAnalysis.java b/07/src/de/dis2017/MainAnalysis.java index aba38e4..9bb4ae9 100644 --- a/07/src/de/dis2017/MainAnalysis.java +++ b/07/src/de/dis2017/MainAnalysis.java @@ -13,16 +13,17 @@ public class MainAnalysis { public static void main(String[] args) { _orm = new ORM(); Map>> sales = _orm.getSalesCrossTable(2017, - "PRODUCTFAMILY"); + "PRODUCTFAMILY", + "NAME"); printTable(sales); } private static void printTable(Map>> crossTable) { List articleNames = new ArrayList<>(crossTable.get("total").get("total").keySet()); Collections.sort(articleNames); - StringBuilder columnHeaderEdge = new StringBuilder("+-----------------+-----------------+"); - StringBuilder columnHeader = new StringBuilder("| Location | Time |"); - StringBuilder leftAlignFormat = new StringBuilder("| %-15s | %-15s |"); + StringBuilder columnHeaderEdge = new StringBuilder("+------------------------+-----------------+"); + StringBuilder columnHeader = new StringBuilder("| Location | Time |"); + StringBuilder leftAlignFormat = new StringBuilder("| %-22s | %-15s |"); for (String article : articleNames) { if (article.equals("total")) continue; diff --git a/07/src/de/dis2017/data/db/ORM.java b/07/src/de/dis2017/data/db/ORM.java index e590677..b49d4dc 100644 --- a/07/src/de/dis2017/data/db/ORM.java +++ b/07/src/de/dis2017/data/db/ORM.java @@ -202,10 +202,14 @@ public class ORM { * @param year the year to be queried * @param productDimension the column of the productDimension to be used (name for article name, productgroup, * productfamily, productcategory) + * @param locationDimension the column of the locationDimension to be used (name for shop name, city, region, country) * @return the cross table */ - public Map>> getSalesCrossTable(int year, String productDimension) { - String querySQL = "SELECT SUM(s.SOLDUNITS) AS sales, a." + productDimension + " AS article, sh.CITY AS city, " + + public Map>> getSalesCrossTable(int year, + String productDimension, + String locationDimension) { + String querySQL = "SELECT SUM(s.SOLDUNITS) AS sales, a." + productDimension + " AS article, sh." + + locationDimension + " AS city, " + "d.QUARTER AS quarter " + "FROM VSISP12.SALES AS s, " + "VSISP12.DATETABLE AS d, " + @@ -215,9 +219,10 @@ public class ORM { "AND s.STOREID = sh.ID " + "AND s.ARTICLEID = a.ID " + "AND d.YEAR = " + year + " " + - "GROUP BY GROUPING SETS ( (), (sh.CITY), (a." + productDimension + "), " + - "(sh.CITY, a." + productDimension + "), " + - "(d.QUARTER, sh.CITY), (sh.CITY, a." + productDimension + ", d.QUARTER) )"; + "GROUP BY GROUPING SETS ( (), (sh." + locationDimension + "), (a." + productDimension + "), " + + "(sh." + locationDimension + ", a." + productDimension + "), " + + "(d.QUARTER, sh." + locationDimension + "), " + + "(sh." + locationDimension + ", a." + productDimension + ", d.QUARTER) )"; Map>> sales = new HashMap<>(); try {