Na minha pergunta anterior , obtive uma tabela de resultados do formulário:
ano_masculino | idade | sexo_masculino | masculino_OrderID | ano_feminino | sexo_feminino | ID_do_pedido_feminino |
---|---|---|---|---|---|---|
2012 | 18 | M | 4268 | 2013 | F | 4269 |
2021 | 75 | M | 4269 | 2020 | F | 4270 |
2018 | 29 | M | 4271 | 2019 | F | 4272 |
2016 | 56 | M | 4273 | 2015 | F | 4270 |
2014 | 33 | M | 4274 | 2014 | F | 4272 |
2022 | 40 | M | 4001 | 2017 | F | 4002 |
O código para dar esse resultado é:
WITH male_sample AS (
SELECT TOP (200) [Year],[Gender],[Age],[OrderID]
FROM [test]
WHERE AgeYrend <= 90 AND Sex = 'M'
ORDER BY NEWID()),
female_sample AS (
SELECT TOP (200) m.[Year] AS male_Year, m.[Age] AS age, m.[Gender] AS male_Gender, m.[OrderID] AS male_OrderID,
f.[Year] AS female_Year, f.[Gender] AS female_Gender, f.[OrderID] AS female_OrderID
FROM male_sample m
INNER JOIN [Test] f ON m.Age = f.Age
WHERE f.Sex = 'F'
ORDER BY NEWID())
SELECT *
FROM female_sample
ORDER BY Age;
Então, tentei modificar isso para obter 2 tabelas de resultados separadas - uma para homens e uma para mulheres - enquanto ainda mantinha os pares de resultados de um homem e uma mulher da mesma idade. Este é o código que tentei:
WITH male_sample AS (
SELECT TOP (200) [Year],[Gender],[Age],[OrderID]
FROM [test]
WHERE AgeYrend <= 90 AND Sex = 'M'
ORDER BY NEWID()),
female_sample AS (
SELECT TOP (200) m.[Year] AS male_Year, m.[Age] AS age, m.[Gender] AS male_Gender, m.[OrderID] AS male_OrderID,
f.[Year] AS female_Year, f.[Gender] AS female_Gender, f.[OrderID] AS female_OrderID
FROM male_sample m
INNER JOIN [Test] f ON m.Age = f.Age
WHERE f.Sex = 'F'
ORDER BY NEWID())
SELECT male_Year, Age, male_Gender, male_OrderID
FROM female_sample
ORDER BY Age
SELECT female_Year, Age, female_Gender, female_OrderID
FROM female_sample
ORDER BY Age;
O SQL Server não gosta das 3 linhas finais de código, gerando o seguinte erro -
Msg 208, Nível 16, Estado 1, Linha 18
Nome de objeto inválido 'female_sample'.
Tentei mexer no código de várias maneiras, mas nada do que tentei funcionou. Alguém pode me dizer onde estou errando?
Como @Dale sugeriu, você pode criar uma tabela temporária e selecionar homens e mulheres com um filtro de gênero.
Estendi o violino anterior aqui.
Abordagem da tabela temporária
1.Criar tabela temporária
2. Insira o conjunto de resultados da consulta na tabela temporária
3. Selecione amostras masculinas na tabela temporária.
Dados de amostra masculina
4. Selecione amostras femininas na tabela temporária.
Dados de amostra feminina
Se você não quiser criar uma tabela temporária, você pode dividir a consulta assim
Amostras masculinas
Gera
Amostra feminina
Gera