如何编写SQL查询以选择具有内部联接的百分比?

如何编写SQL查询以选择具有内部联接的百分比?,sql,tsql,Sql,Tsql,我有两张桌子 第一桌 FtID ItemName Days --------------------------------------- 1 Drive 10 2 Run 5 3 Read 21 第二桌 StID FtID Completed (bit) Da

我有两张桌子

第一桌

FtID         ItemName            Days
---------------------------------------
1            Drive                10
2            Run                  5
3            Read                 21
第二桌

StID    FtID        Completed (bit)         DateTime  
-----------------------------------------------------

1        1             0                    07/11/2011
2        1             1                    08/11/2011 
3        1             1                    09/11/2011 
4        1             0                    10/11/2011 
5
我需要从两个表中进行选择,并获得如下所示的数据

ItemName Days DaysCompleted DaysIncompleted  PercentageCompletion     DaysLeft
---------------------------------------------------------------------------------------          
Drive     10    2              2                40%                   6
正如JNK所指出的,如果Completed确实有一点,那么您需要转换为整数,或者使用SUM/CASE作为他的答案。此外,我还将完成百分比输出为40,如果需要的话。40,那么如果t1.Days不是小数,则需要转换为小数

SELECT
   ItemName,
   Days,
   sum(cast(Completed as integer) as DaysCompleted,
   (max(DateTime) - min(DateTime)) - sum(cast(Completed as integer) as Days Incompleted,
   (Days - (max(DateTime) - min(DateTime))) / Days as Percentage Completion,
   Days - (max(DateTime) - min(DateTime)) as DaysLeft
FROM
   Table_1 T1 INNER JOIN Table_2 T2 ON T1.FtID = T2.FtID
GROUP BY
   ItemName,
   Days
从这个开始/玩转它

试试:

SELECT  f.ItemName, 
        f.Days,
        SUM(CASE WHEN s.Completed = 1 THEN 1 ELSE 0 END) as DaysCompleted,
        SUM(CASE WHEN s.completed = 0 THEN 1 ELSE 0 END) as DaysIncompleted,
        CAST((COUNT(s.completed)/f.days) as DECIMAL(10,8)) as PercentageComplete,
        (f.days-(COUNT(s.completed)) as DaysLeft
FROM FirstTable F
INNER JOIN SecondTable S
    ON F.FTID = S.FTID
GROUP BY f.itemname, f.days

我试着把两张桌子连在一起。但是,当我试图计算第一个变量时,它对我不起作用。如果完成的字段有点小,我认为你不能直接对它进行求和。我做了一些小的更改,它除了DaysLeft之外都有效。它显示我和未完成的日子一样。我需要返回未完成的天数和大于NOW的datetime。我得到错误。不允许从数据类型datetime隐式转换为int。使用CONVERT函数运行此查询。确定-然后使用CONVERT而不是Cast。只是为了了解它,否则,它基本上就是Convertdatatype,field。
SELECT  f.ItemName, 
        f.Days,
        SUM(CASE WHEN s.Completed = 1 THEN 1 ELSE 0 END) as DaysCompleted,
        SUM(CASE WHEN s.completed = 0 THEN 1 ELSE 0 END) as DaysIncompleted,
        CAST((COUNT(s.completed)/f.days) as DECIMAL(10,8)) as PercentageComplete,
        (f.days-(COUNT(s.completed)) as DaysLeft
FROM FirstTable F
INNER JOIN SecondTable S
    ON F.FTID = S.FTID
GROUP BY f.itemname, f.days