0

我有两张桌子。

一张表存储项目及其成本,并使用自己的 guid 进行唯一存储。

项目成本表

Item_ID     ItemCategory   Item    Cost

x-xx-x      Computer       Laptop  400.00

另一个表存储了一个工作空间,该工作空间是这些项目的集合,最好的说明。

工作空间表

WorkSpace_ID    Workspace_Name   Item_Category_1     Item_Category_2 and so on....

xx-xx-xx         Workspace A     xx-xx-xx          (the guid from the first table) 

现在我需要某种方法将 ItemCost 表中的成本与它们在 Work Space 表中表示的 guid 连接起来,然后将它们加到各列中以得出工作空间的总成本。Work Space 表中的某些 Item_Category 列将为空。

相当新的 SQL,在这里学习。如果有更好的方法来构建这个,我愿意提出建议。

谢谢。

4

2 回答 2

2

那么你的问题的一部分是Workspace表的结构。该表未标准化。

在您当前的设计中,您将需要多次取消透视或加入表格以获得结果。workspace

当前结构查询将是:

select *
from itemcost i
left join
(
  select workspace_id,
    worksapce_name,
    item_category_1 ItemCategory
  from workspace
  union all
  select workspace_id,
    worksapce_name,
    item_category_2
  from workspace
) w
  on i.Item_ID = w.ItemCategory

通常你会有一个Workspace表和一个单独的表来链接ItemCost到被Workspace调用的workspace_items

create table workspace
(
  workspace_id, 
  Workspace_Name
);

create table workspace_items
(
  workspace_id, 
  Item_ID
);

这将使桌子上的连接更加容易。此结构允许您为每个工作区分配多个项目类别。如果您更改表结构,那么您的查询将是:

select *
from itemcost i
left join workspace_items wo
  on i.item_id = wi.item_id
left join workspace w
  on wi.workspace_id = w.workspace_id
于 2013-03-19T19:08:27.687 回答
0

您需要在 WorkSpaces 和 Items 之间创建另一个多对多表(并从 Workspace 表中删除 Item 列):

WorkSpaceItems 表:WorkSpace_ID -- ItemID

然后很容易查询所有 WorkSpaceItem,将其连接到 Items 表并进行总结。

这是架构和示例查询的链接:http ://www.sqlfiddle.com/#!3/35336/7

于 2013-03-19T19:06:15.703 回答