2016-07-11 91 views
1

我有一个查询从2个表中获取数据。SQL Server:根据table1中的值返回特定table2列中的值

  • Transaction表包含week_id,CUSTOMER_ID,UPC12,sales_dollars
  • Products表包含UPC12,COLUMN_1,COLUMN_2,column_3

我想我的查询到产品表返回值,依据是什么customer_id位于交易表中。 customer_id = 1应该返回column_1customer_id = 2应该返回column_3

SELECT 
    t.week_id, 
    customer_id, 
    upc12, 
    p.___________ sum(t.sales_dollars) 
FROM 
    transaction t, products p 
WHERE 
    t.upc_12 = p.upc_12 
GROUP BY 
    t.week_id, customer_id, upc12, p.___________ 

抱歉,如果这是没有意义的,但我的研究一直没有得到很好的,因为我不知道如何正确地制定我的问题。你可能猜到我是SQL新手。

谢谢!

+0

[不良习惯踢:使用旧样式的JOIN(http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08 /bad-habits-to-kick-using-old-style-joins.aspx) - 旧式*逗号分隔的表*样式列表被替换为ANSI中的* proper * ANSI'JOIN'语法* * 92 ** SQL标准(**超过20年**前),其使用不鼓励 –

+0

呃不能格式化这个正确的..这是你的意思是:select ...从事务t JOIN产品p ON t.upc12 = p.upc12? – Nickstoy

+0

所以你想要一个案例陈述?例如'当case1时customer_id然后col1当2然后col3结束'? – ZLK

回答

0

下面是做到这一点的一种方法:

;WITH cte as 
(
SELECT 
    t.week_id, 
    customer_id, 
    upc12, 
    CASE customer_id 
     WHEN 1 THEN p.Column_1 
     WHEN 2 THEN p.Column_2 
     WHEN 3 THEN p.Column_3 
    END As ColByCustomer, 
    t.sales_dollars 
FROM transaction t 
INNER JOIN products p on t.upc_12 = p.upc_12 
) 

SELECT week_id, customer_id, upc12, ColByCustomer, SUM(sales_dollars) 
FROM cte 
GROUP BY week_id, customer_id, upc12, ColByCustomer 
+0

谢谢! CASE正是我所需要的,我不知道这个功能。简直太神奇了! – Nickstoy

+0

很高兴帮助:-)。如果答案解决了您的问题,您应该将其标记为已接受,以便其他人会知道问题已解决。 –

相关问题