0

我的问题在下面的表格结构中。所有项目按分组storeNamestoreId然后显示每个商店的每个项目的总数。但是某些商店没有出售的某些商品因此显示为NULL..是否可以

  • 显示egg&bacon而不是列NULL中的前 8 条记录itemName
  • 显示可乐而不是列中NULL的第二个 8 itemName,依此类推。

我不知道他们有多少项目。所以它是动态的。

我想这样做是因为我已经用 pentaho 报表设计器创建了一个交叉表报表。它工作正常,但它需要数据才能正确显示。所以每个项目必须有 8 条记录,每个商店一个。所以我可以按 store 和itemname. 因此,报告显示 - 或 0 表示这些商店未售出的商品。

我有的

storeId  storeName itemName  total
1        storeA    egg&bacon 75
2        storeB    NULL      NULL
3        storeC    egg&bacon 30
4        storeD    NULL      NULL
5        storeE    NULL      NULL
6        storeF    egg&bacon 50
7        storeG    NULL      NULL
8        storeH    NULL      NULL
1        storeA    coke      105
2        storeB    coke      90
3        storeC    coke      60
4        storeD    NULL      NULL
5        storeE    coke      20
6        storeF    coke      80
7        storeG    NULL      NULL
8        storeH    NULL      NULL

我想要什么(如果下表不现实,我可以创建一个单独的列来对它们进行分组,但又如何?)

    storeId  storeName itemName  total
    1        storeA    egg&bacon 75
    2        storeB    egg&bacon 0
    3        storeC    egg&bacon 30
    4        storeD    egg&bacon 0
    5        storeE    egg&bacon 0
    6        storeF    egg&bacon 50
    7        storeG    egg&bacon 0
    8        storeH    egg&bacon 0
    1        storeA    coke      105
    2        storeB    coke      90
    3        storeC    coke      60
    4        storeD    NULL      0
    5        storeE    coke      20
    6        storeF    coke      80
    7        storeG    NULL      0
    8        storeH    NULL      0

这是示例 SQL 语句

SELECT storeId , storeName, itemName, total FROM STORE
 LEFT OUTER JOIN
(
    SELECT storeId, storeName, itemId,  total FROM REVENUE_CENTER as RVC
    LEFT OUTER JOIN MENU_ITEM_TOTAL as MIT ON STORE.storeId = MIT.storeId       
) as subQ ON STORE.storeId = subQ.storeId

LEFT OUTER JOIN MENU_ITEM as MI ON  MI.itemId = subQ.itemId

提前感谢奥兹。

4

1 回答 1

0
  1. 如果您想知道商店中的鸡蛋和培根为零,您至少必须将商品名称设置为“鸡蛋和培根”

  2. 要将总列中的 null 更改为零,您可以使用 ISNULL(itemName, 0)

  3. 由于 storeid 和 name 是常量,因此您应该只将 storeid 保留在表中,并按它进行分组(更好的性能,更少的数据空间)并将商店名称保留在另一个表中。这会将您的 group by 语句更改为仅基于商店 ID。

  4. 考虑不保存现在为 null、null 的项目的记录 - 这是您的代码应该处理的事情。

于 2013-07-12T08:04:09.077 回答