【问题标题】:Joining two tables and while pivoting sql server 2008连接两个表并同时旋转 sql server 2008
【发布时间】:2014-05-09 11:47:37
【问题描述】:

我有两张这样的桌子

表1

SegmentNo  PassingPotencies
1           8
2           10

表2

BatchAvg     Total   TotalSegments  TotalPassed
106.22        20          2            18

我想通过简单的登录连接两个表。如果表 1 中的 Passingpotencies 不等于 10,则该段失败,反之亦然。最终结果应该是这样的

表格结果

BatchAvg     Total     TotalSegments     TotalPassed     Segment1     Segment2
106.22         20           2               18              Fail        Pass

非常感谢任何帮助。谢谢。

【问题讨论】:

  • 这两个表是如何连接的?两者都有批号吗?
  • 抱歉,目前这些表之间没有关联。它们是完全分开的。
  • 不可能,除非通过某些公共列在表格之间存在关系
  • 那你如何选择和Table1的第1行或第2行比较呢?
  • 哦,我明白了。您按 SegmentNo 进行比较。是这样吗?你可以有任意数量的段吗?

标签: sql sql-server sql-server-2008 join


【解决方案1】:

使用您当前的设计,这是您可以实现的(最接近的)。

在此处查看演示 http://sqlfiddle.com/#!3/e86f5/5

select distinct BATCHAVG,
TOTAL,
TOTALSEGMENTS,
TOTALPASSED,
SegmentNo,
case when PASSINGPOTENCIES <> 10 then 'Failed'
else 'Passed' end as SegmentStatus
from
(
select * from table2,table1
 ) X

以上查询将导致

【讨论】:

  • 感谢您的帮助。你给了我一个全新的视角。
【解决方案2】:

这将适用于您的实际情况。在此处查看演示:SQLFiddle

首先,连接两个表:

SELECT 
    T2.BATCHAVG
,   T2.TOTAL
,   T2.TOTALSEGMENTS
,   T2.TOTALPASSED
,   T1.SEGMENTNO
,   (CASE WHEN T1.PASSINGPOTENCIES >= 10 THEN 'PASSED' ELSE 'FAILED' END)   AS SEGMENT
INTO TABLE3
FROM TABLE1 T1
CROSS JOIN TABLE2 T2

然后,像这样选择这个表。这是某种 PIVOT:

SELECT 
    T.BATCHAVG
,   T.TOTAL
,   T.TOTALSEGMENTS
,   T.TOTALPASSED
,   MAX(T.SEGMENT1)     AS SEGMENT1
,   MAX(T.SEGMENT2)     AS SEGMENT2
FROM (
SELECT 
    T1.BATCHAVG
,   T1.TOTAL
,   T1.TOTALSEGMENTS
,   T1.TOTALPASSED
,   (CASE WHEN T1.SEGMENTNO = '1' THEN T1.SEGMENT END) AS SEGMENT1
,   (CASE WHEN T1.SEGMENTNO = '2' THEN T1.SEGMENT END) AS SEGMENT2
FROM TABLE3 T1
) T
GROUP BY
    T.BATCHAVG
,   T.TOTAL
,   T.TOTALSEGMENTS
,   T.TOTALPASSED

【讨论】:

  • 这正是我想要的。谢谢!!。
猜你喜欢
  • 2014-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-22
  • 2019-03-14
  • 2012-03-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多