如何左连接两个表,仅从第二个表中选择第一行?

我的问题是跟进: SQL Server:如何加入第一行 我使用了该线程中建议的查询。
CREATE TABLE table1(
id INT NOT NULL
);
INSERT INTO table1(id) VALUES (1);
INSERT INTO table1(id) VALUES (2);
INSERT INTO table1(id) VALUES (3);
GO
CREATE TABLE table2(
id INT NOT NULL
, category VARCHAR(1)
);
INSERT INTO table2(id,category) VALUES (1,'A');
INSERT INTO table2(id,category) VALUES (1,'B');
INSERT INTO table2(id,category) VALUES (1,'C');
INSERT INTO table2(id,category) VALUES (3,'X');
INSERT INTO table2(id,category) VALUES (3,'Y');
GO
------------------
SELECT
table1.*
,FirstMatch.category
FROM table1
CROSS APPLY (
SELECT TOP 1
table2.id
,table2.category …Run Code Online (Sandbox Code Playgroud) 我想将给定范围内的值转换为VBA字符串,其中原始单元格值由任何选定的列分隔符和行分隔符分隔.分隔符可以是一个字符或更长的字符串.行分隔符是该行末尾的字符串.字符串应该在我们从左上角,从左到右,到右下角读取文本时完成.
以下是范围A1中的VALUES示例:C5:
+----+----+----+
| A1 | B1 | C1 |
+----+----+----+
| A2 | B2 | C2 |
+----+----+----+
| A3 | B3 | C3 |
+----+----+----+
| A4 | B4 | C4 |
+----+----+----+
| A5 | B5 | C5 |
+----+----+----+
Run Code Online (Sandbox Code Playgroud)
期望的结果是VBA字符串:
A1,B1,C1@$A$2,$B$2,$C$2@A3,B3,C3@A4,B4,C4@A5,B5,C5@
Run Code Online (Sandbox Code Playgroud)
为了便于阅读,我将这样展示:
A1,B1,C1@
A2,B2,C2@
A3,B3,C3@
A4,B4,C4@
A5,B5,C5@
Run Code Online (Sandbox Code Playgroud)
作为列分隔符,我选择了,(逗号),并作为行分隔符@符号.当然这些可能是任何字符\r\n.
我想要从范围快速烹饪字符串的原因是因为我想通过ADO连接将其发送到SQL Server.正如我到目前为止测试的那样,它是即时传输大量数据的最快方法.如何在SQL Server上拆分此字符串的孪生问题在于:在SQL Server 中给定行分隔符和列分隔符的情况下将字符串拆分为表
解决方案1.遍历所有行和列.问题是,如果有更优雅的方式,然后循环所有行和列?我更喜欢VBA解决方案,而不是公式一.
解决方案2. Mat's Mug在评论中提出建议.CSV文件是理想的结果.我想在不保存的情况下即时完成.但好点 - 模仿CSV是我想要的,但我想要它而不保存.
赏金后编辑
Thomas Inzina的答案疯狂快速,他的解决方案是便携式的.普通的VBA循环比大型数据集上的JOIN等工作表函数更快.我不建议在VBA中使用工作表函数来实现此目的.我已经投票给所有人.谢谢你们.
如何匹配不精确且单词顺序不同的字符串。通常,字符串具有相似的数字模式,但单词的顺序可能不同。
例如,我会考虑字符串的良好匹配:
目标字符串:Apple 10mg/51L Tail
测试字符串:(Tail 10mg/51L Apple只是打乱单词,拼写正确)
我还会考虑以下字符串之间的良好匹配:
测试字符串:(51L MissleadingLENWord ObfuscateTail 10mg Apple如果我们使用LIKE子句逐个检查每个单词,则可以在测试字符串中找到目标字符串的所有单词,即可以在单词“ObfuscateTail”的测试字符串中找到目标字符串的“Tail”)。
我想在返回百分比数字的函数中看到这个问题的解决方案,这意味着字符串有多相似 - 零 - 字符串不同,100% 两个字符串是相同的。
我应该使用哪种算法?如果可以用 SQL Server 来实现那就最好了。
我可以找到这里提出的一些算法:Fuzzy Matching using T-SQL。主要答案中提到的编辑距离算法是否适合单词的混合顺序?
是否有任何解决方法可以在已发布的报告中直接通过 PBI 输入数据?我希望用户对图表输入评论。如果用户可以直接在图表下方的 PBI 报告中执行此操作,那就太棒了。
我可以在官方的 PBI Ideas For Improvement 页面上看到,这些功能是开发人员的梦想,可以投票:
https://ideas.powerbi.com/forums/265200-power-bi-ideas/suggestions/9414921-input-fields
也许有一些隐藏的解决方法超出了微软团队的注意力?也许 R 中有一些可视化或脚本允许将数据发送到任何可以存储的地方 - SQL Server、Sharepoint?
这是在 R 中制作的非常鼓舞人心的 IO 提示示例 - 将在 PBI 中完成的点击坐标传递给 SQL,然后返回到 Power BI:https : //medium.com/@dr_eldersveld/r-visuals-in-power-bi-beyond-地块-74c618f2e6f3
我想格式化 DAX 度量,以便将值0.105显示为+10.5%,并将值-0.105显示为-10.5%。对我来说重要的是加号。我使用失败FORMAT(measure, "+0.0%")。
我在FORMAT函数文档中找不到任何有用的东西:https :
//msdn.microsoft.com/query-bi/dax/custom-numeric-formats-for-the-format-function
我能想到的唯一解决方案是使用IF或SWITCH函数处理它。有没有办法避免它?
IF(variable>0, "+"&variable, variable)
Run Code Online (Sandbox Code Playgroud) 如何获取销售金额最小日期和最大日期之间的所有日期的销售金额的最新日期。在表中,某些日期的金额可能为空。以下是预期结果的示例:
这是我尝试过的。这些都是 DAX 指标。
LastDate =
CALCULATE(
LASTDATE( Sales[Date] ),
REMOVEFILTERS( Sales[Date] )
)
Run Code Online (Sandbox Code Playgroud)
LastNonBlank =
CALCULATE(
LASTNONBLANK( Sales[Date], [Sales] ),
REMOVEFILTERS( Sales )
)
Run Code Online (Sandbox Code Playgroud)
MaxDate =
CALCULATE(
MAX( Sales[Date] ),
REMOVEFILTERS( Sales[Date] )
)
Run Code Online (Sandbox Code Playgroud)
MaxDate_Filter =
CALCULATE(
MAX( Sales[Date] ),
FILTER( ALL( Sales ), Sales[Amount] > 0 )
)
Run Code Online (Sandbox Code Playgroud)
这是我得到的:
因此,这些措施都没有产生预期的结果。
重现问题的表:
let
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMjIwMtA1MAQiJR0lEIYLmCjF6iDJGwHl8EgbA+VM8cibAOWM8cibQoxXio0FAA==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type text) meta [Serialized.Text = true]) in type table [Date = _t, Amount = _t, #"Expected Result" = …Run Code Online (Sandbox Code Playgroud) 对于任何给定日期,我想获得最近 3 天非空白销售额的平均销售额。因此,我不仅需要检索最后的非空白销售额(这可能很容易),而且还需要获得倒数第二和倒数第三的销售额。一般来说,我需要 N'th last sales。
样本数据:
+------------+--------+--------+--------+--------+------------------+
| Date | Amount | N'th 1 | N'th 2 | N'th 3 | Expected Results |
+------------+--------+--------+--------+--------+------------------+
| 2021-02-01 | 1 | 1 | | | 1.00 |
| 2021-02-02 | 2 | 2 | 1 | | 1.50 |
| 2021-02-03 | 2 | 2 | 2 | 1 | 1.67 |
| 2021-02-04 | | 2 | 2 | 1 | 1.67 |
| 2021-02-05 | 3 | 3 …Run Code Online (Sandbox Code Playgroud) DECLARE @dateEnd datetime
SET @dateEnd = '2014-11-30T23:59:59.999'
SELECT @dateEnd
Run Code Online (Sandbox Code Playgroud)
为什么我得到结果:
2014-12-01 00:00:00.000
我想为SELECT条件使用变量:
where [MyDate] between @dateStart and @dateEnd
Run Code Online (Sandbox Code Playgroud)
这是另一个问题,但相关.我希望包含第一个数据点(dataStart),并从所选数据范围中排除第二个(dataEnd).怎么做?
如何在Power BI的M中选择每个类别具有最大值的行。假设我们有表:
+----------+-------+------------+
| Category | Value | Date |
+----------+-------+------------+
| apples | 1 | 2018-07-01 |
| apples | 2 | 2018-07-02 |
| apples | 3 | 2018-07-03 |
| bananas | 7 | 2018-07-04 |
| bananas | 8 | 2018-07-05 |
| bananas | 9 | 2018-07-06 |
+----------+-------+------------+
Run Code Online (Sandbox Code Playgroud)
所需的结果是:
+----------+-------+------------+
| Category | Value | Date |
+----------+-------+------------+
| apples | 3 | 2018-07-03 |
| bananas | 9 | 2018-07-06 |
+----------+-------+------------+
Run Code Online (Sandbox Code Playgroud)
这是PBI的开始表: …
当我们可能需要在 Power Query 编辑器中禁用表的“启用加载”时,实际场景的示例是什么?它的工作原理与从整个数据模型中删除表相同吗?如果是这样,为什么还要种植杂草呢?