2014-12-03 24 views
0

比方说,我有一个表产品和一张桌子订单它使用表“产品”指定什么是产品每个为了出售。如何将表寄存器转换为临时表的列?

现在我要作报告导出到Excel,其中每个产品在不同的列,他们中的每一个具有计数寄存器许多产品的销售方式和销售需要,每卖家一个寄存器。

例子:

产品:

id | desc | target_per_month 
------------------------------- 
1 | prepaid | 1000 
2 | pospaid | 500 

订单:

id | seller | product_id | date 
-------------------------------------- 
1 | clark | 1   | 2014-12-11 
2 | kent | 1   | 2014-12-10 
3 | kent | 2   | 2014-12-11 
4 | kent | 1   | 2014-12-10 
5 | clark | 2   | 2014-12-09 

我想要什么:

seller | prepaid_sold | prepaid_target | prepaid_left | pospaid_sold | pospaid_target | pospaid_left 
------------------------------------------------------------------------------------------- 
clark | 1   | 1000   | 999   | 1   | 500   | 499 
kent | 2   | 1000   | 998   | 1   | 500   | 499 

如何将这项select样子,如果我想这个TA可以动态地接受新产品?现在的方式是手动为每个新产品放3列,非常可怕!

回答

0

您在这里有一个很微妙的,我相信你应该尝试不同的方法,但要回答你的问题我会说,你可以动态地创建了“CREATE TABLE”语句基于词语的查询分组的结果你需要。您需要通过查询创建组,为其创建一个游标,并创建一个循环来完成创建表的sql语句。 一旦您拥有该语句,就可以使用“EXEC(@MySqlStatement)”创建表,其中@MySqlStatement是包含“CREATE TABLE”语句文本的变量。

之后,您可以使用相同的循环来完成带有数据的新表格。

虽然我确信你可以使用这种方法,但我从来没有尝试过,因为它需要大量的工作和测试。

你需要考虑的另一件事是你要在哪里调用t-sql脚本。如果你建立一个商店程序,它会很好,但你不能在Excel中使用商店程序(至少它不是直截了当的)。如果你构建一个多语句表函数,可能它不会允许你做某些事情,因为这些函数对你可以使用的t-sql语言函数有一些限制。

如果你要考虑的另一种选择,SSRS将是最好的,因为它可以与您需要根据您的结果集的所有列创建一个矩阵,基本上它为您完成所有的工作。这份报告可以导出为ex​​cel。

另一种选择是创建一个样,你现在有和改造在Excel中的数据行的多个逻辑resulset,通过透视表,宏的手段......

希望这有助于。