另一个参数中的列作为SQL SERVER
我有两张这样的桌子:另一个参数中的列作为SQL SERVER,sql,sql-server,multiple-tables,Sql,Sql Server,Multiple Tables,我有两张这样的桌子: Name Salary_Got =================== Andy 300 Ana 360 表2.工作 Name Date =============== Andy 1 Jan Andy 2 Jan Andy 3 Jan Ana 1 Jan Ana 2 Jan Ana 3 Jan Ana 4 Jan 和表U工资 Name
Name Salary_Got
===================
Andy 300
Ana 360
表2.工作
Name Date
===============
Andy 1 Jan
Andy 2 Jan
Andy 3 Jan
Ana 1 Jan
Ana 2 Jan
Ana 3 Jan
Ana 4 Jan
和表U工资
Name Salary
=================
Andy 150
Ana 120
我想使用表_Salary中的列名和Salary作为参数。因此,我可以显示如下数据:
Name Salary_Got
===================
Andy 300
Ana 360
上表显示了通过工资x工作数量计算得出的工资。但我只展示了1月2日开始工作的地方。所以,安迪只工作2天,安娜只工作3天
注:
这只是一个说明问题的例子。我的问题比这更复杂。关键是我不能使用JOIN,因为我需要计算其他行
我希望任何人都能帮助我解决这个问题。提前谢谢。试试这样的东西
select ts.Name, (ts.Salary * ISNULL(tw.workcound,0)) from Table_Salary ts left join
(select Name, count(*) workcount from Table_Work where Date != '2017-01-02' group by Name)
tw ON ts.Name = tw.Name
试试这个:
select TW.Name, TW.DaysWorked * TS.Salary from (
select [Name], count(*) [DaysWorked] from Table_Work TW
where [Date] <> '1 Jan' --if you store date as text...
-- where [Date] > '2018-01-01' --if you store Date as date
group by [Name]
) TW join Table_Salary TS on TW.Name = TS.Name
试试这个:你可以使用outerapply来计算每个员工的天数,然后乘以它将得到受尊敬员工的工资
SELECT ts.Name, (ts.Salary*ISNULL(t.tot, 1)) Salary_Got
FROM Table_Salary ts
OUTER APPLY(SELECT COUNT(*) tot
FROM Table_Work tw
WHERE tw.name = ts.name AND [Date] >= '2018-01-02') t
这看起来是一种糟糕的存储日期信息的方式。日期列实际上是文本吗?考虑存储完整日期类型,而不只是文本。如果日期真的是文本,您需要一些奥林匹克运动会来选择日期范围。不,这是唯一的说明阅读以下内容可能会有所帮助: