Sample Data:
Code using SQL only no stored proc.
| Card No | StartZip | EndZip |
|---|---|---|
| 786**** | 97000 | 97003 |
| 787**** | 98000 | 98003 |
Expected output
| Card No | ZipCode |
|---|---|
| 786*** | 97000 |
| 786*** | 97001 |
| 786*** | 97002 |
| 786*** | 97003 |
| 787*** | 98000 |
| 787*** | 98001 |
| 787*** | 98002 |
| 787*** | 98003 |
Sample Data:
Code using SQL only no stored proc.
| Card No | StartZip | EndZip |
|---|---|---|
| 786**** | 97000 | 97003 |
| 787**** | 98000 | 98003 |
Expected output
| Card No | ZipCode |
|---|---|
| 786*** | 97000 |
| 786*** | 97001 |
| 786*** | 97002 |
| 786*** | 97003 |
| 787*** | 98000 |
| 787*** | 98001 |
| 787*** | 98002 |
| 787*** | 98003 |
On
In Snowflake you can also write a recursive CTE to avoid joins:
WITH RECURSIVE ZipCodeRange AS (
SELECT CardNo, StartZip AS ZipCode, EndZip
FROM <NAME OF YOUR TABLE>
UNION ALL
SELECT z.CardNo, z.ZipCode + 1 AS ZipCode, z.EndZip
FROM ZipCodeRange z
WHERE z.ZipCode < z.EndZip
)
SELECT CardNo, ZipCode
FROM ZipCodeRange
ORDER BY CardNo, ZipCode;
Try something like this: