我需要动态选择从连接中更改表,并且表(DataGenerated)是基于UserId的最后一个数字。
示例:如果UserId以2结尾,我将查看DataGenerated_2。如果UserId以3结尾,我将查看DataGenerated_3。如果它以0结尾,我将查看DataGenerated。
我试图制作一个select子句但是我被卡住了,而且在sql执行期间我找不到如何更改表名。
我的SQL仅适用于以0结尾的UserId。
SELECT e.UserId, COUNT(e.UserId) FROM Campaign c
LEFT JOIN DataGenerated e ON c.UserId = e.UserId
WHERE e.Status = 2 and c.ExportDate IS NULL
GROUP BY e.UserId;
如果我进行了10次查询(因为表格为0到_9)并且使用了union all,我可以做我想做的事情,但我试图找到更好的方法。
有什么想法吗?
答案 0 :(得分:2)
它可以使用Cursor: CREATE TABLE #TEST( UserID int)
INSERT INTO #TEST
VALUES
(0),
(1),
(2)
CREATE TABLE #DataGenerated_1(
a int)
CREATE TABLE #DataGenerated_2(
b int)
CREATE TABLE #DataGenerated(
c int)
DECLARE @User int,@Query nvarchar(50)
DECLARE C_Table CURSOR
FOR
SELECT UserID FROM #TEST
OPEN C_Table
FETCH NEXT FROM C_Table INTO @User
While (@@Fetch_status = 0)
BEGIN
IF @User <> 0
BEGIN
SET @Query = 'SELECT * FROM #DataGenerated_'+CONVERT(nvarchar(1),@User)
END
ELSE
BEGIN
SET @Query = 'SELECT * FROM #DataGenerated'
END
EXEC (@Query)
FETCH NEXT FROM C_Table INTO @User
END
CLOSE C_Table
DEALLOCATE C_Table
DROP TABLE #TEST
DROP TABLE #DataGenerated
DROP TABLE #DataGenerated_1
DROP TABLE #DataGenerated_2
希望这是你想要的 祝你有愉快的一天
艾蒂安